将 int 转换为 2 个字节的 Big-Endian

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 字节十六进制值的正确方法是什么?

谢谢

Rol*_*ith 6

使用>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)