You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:06:04