wan*_*ter 1 python int hex endianness
我在将 int 转换为 Big-Endian 编码的 2 个十六进制字节时遇到问题。
例如:
import struct
a = 1234
struct.pack('>I', a)
Run Code Online (Sandbox Code Playgroud)
我收到的是:
'\x00\x00\x04\xd2'
Run Code Online (Sandbox Code Playgroud)
我希望收到的是(2 个字节的十六进制):
'0x04', '0xd2'
Run Code Online (Sandbox Code Playgroud)
我不知道如何得到这个结果,我尝试了不同的切割和移动技术,以便从每 4 个整数中得到我想要的结果,但有时 0 会干扰正确的结果。
接收大端编码整数的这个 2 字节十六进制值的正确方法是什么?
谢谢
使用>H 格式字符串;Python 2 中的示例:
>>> import struct
>>> a = 1234
>>> s = struct.pack('>H', a)
Run Code Online (Sandbox Code Playgroud)
然后你打开它;
>>> first, second = struct.unpack('>BB', s)
>>> first
4
>>> second
210
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Python 3,则可以使用to_bytes:
In [1]: a = 1234
In [2]: a.to_bytes(2, 'big')
Out[2]: b'\x04\xd2'
In [3]: b = bytearray(a.to_bytes(2, 'big'))
In [4]: b[0]
Out[4]: 4
In [5]: b[1]
Out[5]: 210
Run Code Online (Sandbox Code Playgroud)