1

我得到一个字节数组,我正在尝试测试第一个字节的前 4 位是否等于 4。如果不返回错误代码 2。

我尝试从数组中取出字节并拆分它的十六进制值,但我不太确定如何这样做,因为我是使用字节的新手。

def basicpacketcheck (pkt):
    version, hdrlen = bytes(pkt[0:1])
    if version != 4:
        return 2

所以这里是我的代码

pkt[0:1]

给我

bytearray(b'E')

我需要将 E(转换为 0x45)分成 0x4 和 0x5。

4

1 回答 1

2

用于pkt[0]将第一个字节作为 int 69 获取。然后,您可以对 int 对象使用按位移位 ( <<, >>) 和按位和 ( &) 运算符,将其拆分为半字节:

>>> pkt = bytearray(b'EAB82348...')
>>> b = pkt[0]  # 69 == 0x45
>>> (b >> 4) & 0xf  # 0x45 -> 0x4 -> 0x4
4
>>> (b) & 0xf  # 0x45 -> 0x5
5
于 2019-07-31T02:01:26.007 回答