读取bin文件转int16格式时Python结果与Matlab不一致该如何解决
问题根因
- 你此前的操作将整个二进制文件内容直接转换为单个整数,而int16格式每个数值占2字节,需要按2字节为一组拆分后分别转换
- Matlab读取二进制文件默认使用小端字节序(little-endian),你之前使用大端(big)字节序转换,字节顺序颠倒导致数值完全不符合预期
解决方案
方案1:使用Python内置struct模块实现
无需安装第三方依赖,适合轻量场景:
import struct with open('data.bin', 'rb') as f: byte_data = f.read() # 格式符说明:<代表小端序,h代表int16类型,前面加数字代表一次性解析多少个int16 int_list = struct.unpack(f'<{len(byte_data)//2}h', byte_data) print(int_list)
方案2:使用numpy实现
更适合批量数据处理,和Matlab使用习惯高度一致:
import numpy as np # dtype参数说明:<代表小端序,i2代表2字节有符号整数即int16 data = np.fromfile('data.bin', dtype='<i2') print(data)
结果验证
你给出的二进制片段首个字节组为\xed\x02,按小端序转换为int16的计算逻辑为:0x02 * 256 + 0xed = 2*256 + 237 = 749,和你Matlab输出的首个数值完全匹配,结果符合预期。
内容的提问来源于stack exchange,提问作者Bean_noodle
相关产品推荐
相关产品推荐

