Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python struct.pack little-endian=big-endian_Python_Struct_Endianness - Fatal编程技术网

Python struct.pack little-endian=big-endian

Python struct.pack little-endian=big-endian,python,struct,endianness,Python,Struct,Endianness,我试图确保我的一些数据被编码为big-endian二进制。我正在使用struct模块来实现这一点。然而,我将两者转换为大端或小端的结果是相同的。为什么? import sys import json import struct data = { "val1": 20, "val2": 24 } b = json.dumps(data, ensure_ascii=False).encode("utf-8") litt

我试图确保我的一些数据被编码为big-endian二进制。我正在使用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))

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

ByTestRing没有endianness。字符串(字节)是面向字节的,它们没有endianness。正如您在
H
代码中看到的那样,对于单个大于字节的内容,会考虑到尾数。感谢ShadowRanger,您已经消除了我的困惑。我的误解是,我不理解字节串的每个元素都是单独考虑的。因为每个字符单独只有一个字节,所以现在我觉得没有必要定义顺序。我之前考虑过字节字符串作为一个整体。
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