首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python struct.pack小端=大端

Python struct.pack小端=大端
EN

Stack Overflow用户
提问于 2020-07-22 08:37:25
回答 1查看 667关注 0票数 0

我正在尝试确保我拥有的一些数据被编码为高字节二进制。我使用struct模块来做这件事。但是,我将两者转换为大端或小端得到的结果是相同的。为什么?

代码语言:javascript
复制
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))

给出以下结果

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 08:45:00

您使用的是char[]的格式说明符"s“,它只是一个八位字节的字符串。字符/八位字节组成的字符串没有字节顺序。当你使用"H“时,你会看到unsigned short /little是相反的顺序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63025036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档