在Windows上,struct.pack(!i,10)结果为“00 00 00 0d 0a”

时间:2015-10-11 09:47:52

标签: python struct pack

我发现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,我该怎么办呢?

1 个答案:

答案 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'

来自documentation

  

在文本模式下,默认情况下,将特定于平台的行结尾(在Windows上为\n,在Windows上为\r\n)转换为仅\n,并且\n返回写作时特定于平台的行结尾。这种对文件数据的幕后修改适用于文本文件,但会破坏JPEGEXE文件中的二进制数据。在读写这些文件时要非常小心使用二进制模式。