为什么有些值使得struct.pack和struct.unpack在Windows上失败?

时间:2017-06-01 13:40:06

标签: python windows struct binary packed

当我使用struct.pack()将python整数转换为C结构(并将其写入文件)然后struct.unpack()来反转转换时,我通常得到原始值...但并非总是如此。为什么?是否有一些无法控制的价值观?

示例:

import struct
fileName ='C:/myFile.ext'
formatCode = 'H'
nBytes = 2
tries = range(8,12)
for value in tries:
    newFile = open(fileName, mode='w+')
    myBinary = struct.pack( formatCode, value )
    newFile.write(myBinary)
    newFile.close()

    infile = open(fileName,'rb')
    bytesRead = infile.read(nBytes)
    newValue = struct.unpack( formatCode, bytesRead )
    print value, 'equal', newValue[0]
    infile.close()

返回:

8 equal 8
9 equal 9
10 equal 2573
11 equal 11
12 equal 12

它不仅发生在整数(2个字节:格式'H')上,还发生在其他类型和值上。如果我打包为整数,而不是浮点数,则值10会给出这个'错误',但是使用浮点数我会得到其他值的错误。

如果问题是我无法将int number 10转换为这个打包的struct,我还有什么办法可以在文件中写入这个值(打包)?

1 个答案:

答案 0 :(得分:4)

写入时忘了指定二进制模式。 wb+不是w+