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


红糖糍粑
浏览 285回答 1
1回答

大话西游666

您正在使用格式说明符“s”&nbsp;char[],它只是一串八位字节。一串字符/八位字节没有字节序。当您使用“H”时,unsigned short您会看到大/小的顺序相反。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python