import struct from select import select def int16_to_float(high, low): # 将两个 16 位整数合并为一个 32 位整数 combined = (high << 16) | (low & 0xFFFF) # 将 32 位整数解释为浮点数 float_value = struct.unpack('>f', struct.pack('>I', combined))[0] return float_value def float_to_int16(value): # 将浮点数打包为 32 位整数字节 packed = struct.pack('>f', value) # 解包成 32 位整数 combined = struct.unpack('>I', packed)[0] # 分离出高 16 位和低 16 位 high = (combined >> 16) & 0xFFFF low = combined & 0xFFFF return high, low def int16_to_float_n(vals): # 给出的vals是一个数的列表,其长度必须是2的整数倍 _val_num = int(len(vals) / 2) _float_vals = [] for i in range(_val_num): _float_vals.append(int16_to_float(vals[i * 2], vals[i * 2 + 1])) return _float_vals def float_to_int16_n(vals): """ 将多个float类型数转换为一个int16类型数的list :param vals: float类型数的list :return: int16类型数的list """ _val_num = len(vals) _int_vals = [] for i in range(_val_num): _int_vals = _int_vals + [*float_to_int16(vals[i])] return _int_vals if __name__ == '__main__': # 示例 high = 0x3f80 # 16 位高位 low = 0x0000 # 16 位低位 result = int16_to_float(high, low) print(result) high, low = float_to_int16(result) print(high, low) float_val_1 = 0.1 print(float_to_int16(float_val_1)) float_vals = [0.1, 0.2] print(float_to_int16_n(float_vals))