python - Python struct.pack 小端 = 大端
问题描述
我试图确保我拥有的一些数据被编码为大端二进制。我正在使用 struct 模块来执行此操作。但是,我将两者转换为大端或小端的结果是相同的。为什么?
import sys
import json
import struct
data = {
"val1": 20,
"val2": 24
}
b = json.dumps(data, ensure_ascii=False).encode("utf-8")
little = struct.pack(f"<{len(b)}s", b)
big = struct.pack(f">{len(b)}s", b)
print(f"System byteorder: {sys.byteorder}")
print(f"data:\t{b}")
print(f"little:\t{little}")
print(f"big:\t{big}")
print((big == little) and (little == b))
val = 25
b = bytes([val])
big = struct.pack(">H", val)
little = struct.pack("<H", val)
print()
print()
print(f"data:\t{b}")
print(f"little:\t{little}")
print(f"big:\t{big}")
print((big == little) and (little == b))
给出以下结果
System byteorder: little
data: b'{"val1": 20, "val2": 24}'
little: b'{"val1": 20, "val2": 24}'
big: b'{"val1": 20, "val2": 24}'
True
data: b'\x19'
little: b'\x19\x00'
big: b'\x00\x19'
False
解决方案
您正在为 使用格式说明符“s” char[]
,它只是一个八位位组字符串。一串 char/octet 没有字节序。当你使用“H”时,unsigned short
你会看到大/小是相反的顺序。
推荐阅读
- azure-data-factory - Azure 数据工厂 - 复制并行度
- sql-server - Acumatica:自定义表架构在发布时导致错误
- python - 正则表达式花费太多时间
- python - 对 groupby 对象执行更复杂的计算
- python - 如何在 Digital Micrograph 中的 dm-script 和 python 之间进行通信
- react-native - 根据状态值更改背景颜色
- php - Laravel 设置 Pdf 保护
- reactjs - 使用 oidc-client 和客户端密码反应 SPA
- php - 如何通过条带收取不同金额而不是实际授权金额?
- google-cloud-platform - 当我将 .ova 文件导入谷歌云以创建 VM 实例时的问题