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

Python 为什么某些值使struct.pack和struct.unpack在Windows上失败?,python,windows,struct,binary,packed,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

当我使用
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等于8
9等于9
10等于2573
11等于11
12等于12
它不仅发生在整数(2字节:格式“H”)上,还发生在其他类型和值上。如果我打包为整数,而不是浮点,那么值10会给出这个“错误”,但使用浮点时,我会得到其他值的错误


如果问题是我无法将整数10转换为此压缩结构,那么我必须在文件(压缩)中写入此值的替代方法是什么?

您在写入时忘记指定二进制模式
wb+
not
w+

写入时忘记指定二进制模式<代码>wb+非
w+