访问一个字节中的半字节,将其附加到前一个字节,然后对其求值?

Accessing a nibble in a byte, appending it to the previous byte and then evaluating it?

我读入了一组 4 个字节。

b'\xc2\x0c\xe4\x8f'

这是小端数据,例如,我想访问一个参数,它是整个第一个字节和第二个字节的低位(右侧,B0-3))。所以我想要结束的是(在 bin 中):

1100 11000010

首先是第二个字节的下半部分,然后是第一个字节 - 计算结果为 3266。

我必须执行此操作的代码是:

packet=b'\xc2\x0c\xe4\x8f'
bin_str = '0b'+((format(packet[1],'08b'[-4:])+format(packet[1],'08b'))
decoded_data=int(bin_str, 2)

这与我预期的一样有效,但我不确定这是做事的最佳方式。我也尝试过使用按位运算,但让代码识别出我想采用 1 个半字节并以小字节顺序评估它们让我望而却步。如果它是两个完整的字节,我将只使用 int.from_bytes() 并且没有问题。

转换为字符串,进行文本操作并转换回来并不是完成如此简单任务的方法。试试这个:

b = b'\xc2\x0c\xe4\x8f'
n = 0x100*(b[1] & 0x0F) + b[0]

上面的代码仅结合了几个基本操作:检索单个字节、使用二进制与选择位等

具体来说,有4个输入字节:A B C D.

  1. b[0] 检索字节 A,
  2. b[1] 检索字节 B
  3. B & 0xF 清除位 7 到 4:0 0 0 0 B3 B2 B1 B0
  4. 0x100 * value(也就是value << 8):添加8个零位(另一个空字节):

最后,将 1 + 4 相加得到:0 0 0 0 B3 B2 B1 B0 A7 A6 A5 A4 A3 A2 A1 A0

如何转换为 int 并对其进行模运算?

input = b'\xc2\x0c\xe4\x8f'
num = int.from_bytes(input, "little")
result = num % (2**12)

这款适合您需要吗?