在Windows上编写整数时的奇怪二进制文件格式

时间:2016-03-30 03:30:05

标签: python arrays windows binary format

当我尝试将整数写入Windows 7(以及Windows XP)上的文件时遇到一个非常不寻常的问题。源代码如下:

from struct import pack, unpack

def test_write(list_of_integers):
  fmt = '=' + ('L' * len(list_of_integers))
  with open('test.dat', 'wb') as f: f.write(pack(fmt, *list_of_integers))

num = [48, 1699505740, 1, 1, 13988, 13468, 2228, 51]

这是有趣的部分。当我把整个数组写成文件时,即

test_write(num)

使用Hex Editor,文件如下:

Address   0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
00000000  30  00  e6  99  8c  e6  95  8c  01  00  01  00  e3  9a  a4  00
00000010  e3  92  9c  00  e0  a2  b4  00  33  00

当只写入部分数组时,例如

test_write(num[:7])

文件如下:

Address   0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
00000000  30  00  00  00  4c  66  4c  65  01  00  00  00  01  00  00  00
00000010  a4  36  00  00  9c  34  00  00  b4  08  00  00

有趣的是,可以使用struct.unpack以两种格式再次从文件中读回数字。

有人能否对不同的格式有所了解?

0 个答案:

没有答案