我发现Windows系统上的Python struct.pack("!i", 10)
存在一个奇怪的问题。我得到缓冲区并将其保存到文件中,但结果是
00 00 00 0d 0a
在Mac OSX上,结果是
00 00 00 0a
0d
是什么意思?
当我通过11
而不是10
时,结果为00 00 00 0b
。所以我想当我通过10
时,结果应该是00 00 00 0a
。
如果我想通过00 00 00 0a
时获得10
,我该怎么办呢?
答案 0 :(得分:6)
0d
是什么意思?
这意味着'\r'
如果我想通过
00 00 00 0a
时获得10
,我该怎么办呢?
尝试以二进制模式打开文件:
with open('file', 'wb') as f:
f.write(struct.pack("!i", 10))
当您尝试将'\n'
(0a
)写入Windows上的文件并且文本以文本模式打开时,Python会在'\r'
之前添加'\n'
。
在文本模式下,默认情况下,将特定于平台的行结尾(在Windows上为
\n
,在Windows上为\r\n
)转换为仅\n
,并且\n
返回写作时特定于平台的行结尾。这种对文件数据的幕后修改适用于文本文件,但会破坏JPEG
或EXE
文件中的二进制数据。在读写这些文件时要非常小心使用二进制模式。