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

one*_*ain 3 python struct pack

struct.pack("!i", 10)在Windows系统上发现了一个奇怪的Python问题.我得到缓冲区并将其保存到文件中,但结果是

 00 00 00 0d 0a
Run Code Online (Sandbox Code Playgroud)

在Mac OSX上的结果是

00 00 00 0a
Run Code Online (Sandbox Code Playgroud)

什么0d意思?

当我通过11而不是10,结果是00 00 00 0b.所以我想当我通过时10,结果应该是00 00 00 0a.

如果我想00 00 00 0a通过10,我该怎么办呢?

Ale*_*lev 6

什么0d意思?

它的意思是 '\r'

如果我想00 00 00 0a通过10,我该怎么办呢?

尝试以二进制模式打开文件:

with open('file', 'wb') as f:
    f.write(struct.pack("!i", 10))
Run Code Online (Sandbox Code Playgroud)

当您在Windows上尝试write '\n'(0a)到文件并在文本模式下打开文件时,Python '\r'之前会添加'\n'.

来自文档:

在文本模式下,默认情况下将特定于平台的行结尾(\n在Unix上,\r\n在Windows上)转换为仅\n在读取时,并\n在写入时转换回特定于平台的行结尾.这幕后的修改文件数据精细的文本文件,但会喜欢,在破坏了二进制数据JPEGEXE文件.在读取和写入此类文件时要非常小心地使用二进制模式.