【发布时间】:2012-08-28 16:25:16
【问题描述】:
我正在尝试使用 Python 读取二进制文件。该文件处于 LSB 模式。我导入结构模块并像这样使用解包:
f=open(sys.argv[1],'rb')
contents= unpack('<I',f.read(4))[0]
print contents
f.close()
文件中的数据在LSB模式下为0XC0000500,实际值为0X000500C0。所以你可以看到 LSB 模式的最小尺寸是每字节。
不过,我用的是Mac机器,可能是因为我的gcc或者机器的版本(我不确定。我只是看了http://docs.python.org/library/struct.html关于sizeof和sys.bitorder的),结果来自上面的代码是 X0500C000,所以 LSB 模式的大小是 2Bytes。
我应该如何解决这个问题?
无论这个问题是否得到回答,我都会继续挖掘,如果我有任何东西,我会更新。
ps:数据文件是 32 位机器的 ELF 文件。
pps:由于我要读取大量数据,而且这是读取中的普遍问题,所以手动方式对我来说不是最好的。问题仍然有待解答。
ppps: 标准大小(16 位)” 现在我读到了这个......
【问题讨论】:
-
可以包含
repr(f.read(4))和十进制整数的预期输出? -
文件中的数据按物理顺序是什么——即字节0、字节1等?
-
是的,例如,如果实际值为OXABCD,则文件存储DCBA。
-
dcba到0xabcd似乎不寻常(请参阅updated answer。您能否在问题中包含repr(f.read(4))(不要键入它只是复制粘贴您看到的任何内容)和预期的输出作为十进制整数(作为123,而不是0x7b,以避免对字节顺序产生任何混淆)? -
对不起,我造成了混淆。对于值 DCBA,它应该是 0x0A0B0C0D。对于 repr,它显示了我在问题描述中使用的原始文件的 '\x00\xc0\x00\x05'。
标签: python