为了账号安全,请及时绑定邮箱和手机立即绑定

Python struct.pack 小端 = 大端

Python struct.pack 小端 = 大端

红糖糍粑 2023-03-22 13:54:08
我试图确保我拥有的一些数据被编码为大端二进制。我正在使用 struct 模块来执行此操作。但是,我将两者都转换为大端或小端的结果是相同的。为什么?import sysimport jsonimport structdata = {    "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 = 25b = 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: littledata:   b'{"val1": 20, "val2": 24}'little: b'{"val1": 20, "val2": 24}'big:    b'{"val1": 20, "val2": 24}'Truedata:   b'\x19'little: b'\x19\x00'big:    b'\x00\x19'False
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

您正在使用格式说明符“s” char[],它只是一串八位字节。一串字符/八位字节没有字节序。当您使用“H”时,unsigned short您会看到大/小的顺序相反。



查看完整回答
反对 回复 2023-03-22
  • 1 回答
  • 0 关注
  • 284 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信