为什么某些值会使 struct.pack 和 struct.unpack 在 Windows 上失败?
Why some values make struct.pack and struct.unpack to fail on Windows?
当我使用 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()
returns:
8 equal 8
9 equal 9
10 equal 2573
11 equal 11
12 equal 12
它不仅发生在整数(2 字节:格式 'H')上,也发生在其他类型和值上。值 10 给出此 'error' 如果我打包为整数,而不是浮点数,但使用浮点数时我会收到其他值的错误。
如果问题是我无法将 int 数字 10 转换为这个打包结构,我有什么选择可以将这个值写入文件(打包)?
您在写入时忘记指定二进制模式。 wb+
不是 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()
returns:
8 equal 8
9 equal 9
10 equal 2573
11 equal 11
12 equal 12
它不仅发生在整数(2 字节:格式 'H')上,也发生在其他类型和值上。值 10 给出此 'error' 如果我打包为整数,而不是浮点数,但使用浮点数时我会收到其他值的错误。
如果问题是我无法将 int 数字 10 转换为这个打包结构,我有什么选择可以将这个值写入文件(打包)?
您在写入时忘记指定二进制模式。 wb+
不是 w+
。