当我尝试将整数写入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以两种格式再次从文件中读回数字。
有人能否对不同的格式有所了解?