import struct def int_list_to_bytes(int_list): ''' int列表转换为字节流 ''' byte_stream = b'' for num in int_list: byte_stream += struct.pack('>H', num) return byte_stream def bytes_to_int_list(byte_stream): ''' 字节流转换为int列表 ''' int_list = [] for i in range(0, byte_stream.__len__(), 2): int_list.append(struct.unpack('>H', byte_stream[i:i+2])[0]) return int_list def get_bit(data: int, bit: int) -> int: ''' 获取某比特的值 ''' if data & (1 << bit): return 1 else: return 0 def get_bit_bool(data: int, bit: int) -> bool: ''' 获取某比特的值,并转换为布尔值 ''' return bool(get_bit(data, bit)) def set_bit(number: int, pos: int, value: int): ''' 修改某比特的值,并返回新值 ''' new_number = None if value == 1: new_number = number | (1 << pos) elif value == 0: new_number = number & ~(1 << pos) return new_number # float value to 2 int list def float2intList(dataf: float): parts = struct.pack('>f', float(dataf)) output = parts[2:] + parts[:2] vl_output = bytes_to_int_list(output) return vl_output # 2 int list to float value def intList2Float(intList = []): # print("intList: ", intList) r_drawer = int_list_to_bytes(intList) routput = r_drawer[2:] + r_drawer[:2] floatValue = struct.unpack('>f', routput) return round(floatValue[0], 3)