我試圖確保我擁有的一些數據被編碼為大端二進制。我正在使用 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")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")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
您會看到大/小的順序相反。
添加回答
舉報
0/150
提交
取消