e-n*_*uri 3 python binary endianness
当使用带有 'wb' 标志的 file.write() 时,Python 使用大端或小端,还是 sys.byteorder 值?我怎么能确定字节序不是随机的,我问是因为我在同一个文件中混合了 ASCII 和二进制数据,对于二进制数据,我使用 struct.pack() 并将其强制为小端,但我不是确定 ASCII 数据会发生什么!
编辑 1:自投反对票以来,我将解释更多我的问题!
我正在用 ASCII 和二进制数据编写一个文件,在 x86 PC 中,该文件将通过网络发送到另一台不是 x86 的 PowerPC 计算机,女巫是大端,我怎么能确定数据用 PowerPC 解析时会一样吗?
编辑 2:仍在使用 Python 2.7
对于多字节数据,它默认遵循机器的架构。如果你需要它跨平台工作,那么你会想要强制它。
ASCII 和 UTF-8 被编码为每个字符一个字节,那么它是否受字节顺序的影响?不。
以下是打包小端<或>大端的方法:
import struct
struct.pack('<L', 1234)
'\xd2\x04\x00\x00'
struct.pack('>L', 1234)
'\x00\x00\x04\xd2'
Run Code Online (Sandbox Code Playgroud)
如果您使用 UTF-16,您还可以通过这种方式将字符串编码为大端或小端,例如:
s.encode('utf-16LE')
s.encode('utf-16BE')
Run Code Online (Sandbox Code Playgroud)
UTF-8、ASCII 没有字节序,因为它是每个字符 1 个字节。