处理字节三元组 python
Process Byte Triples python
这个函数的输入是一个列表中的三个字节。 (B01, B02, B03) (124,102,235)
取第二个字节并将其一分为二
取前 4 位(最低位)并将它们存储到变量中 (B02a)
将最后 4 位(最重要的)存储到另一个变量 (B02b)。
你对 python 有什么想法吗?
我试过了
input_list= (120,198,235)
byte_list =bytearray(input_list)
middle_var=byte_list[1]
print(middle_var)
print(type(middle_var))
删除最后 4 个字符
B02b = middle_var[:6]
print(B02b)
删除前 4 个字符
B02a = middle_var[4:]
but didnt worked
它应该是这样的。
(01111000 11000110 11101011)
(**1100** *0110* ) these from the middle (396) split in 2 * 4 bits
(110001111000 *0110*11101011)
结果应该是
12768 110001111000 和 1771 *0110*11101011
您可以使用位移动和“&”运算符来计算 B02a 和 B02b。请像这样更改您的代码。
B02a = B02 & 15
B02b = B02 >> 4
使用按位运算符
B01, B02, B03 = (120,198,235)
print(f' B01: {B01:012b}', B01)
print(f' B02: {B02:012b}', B02)
print(f' B03: {B03:012b}', B03)
print('---')
B02a = B02 & 0xF0
B02b = B02 & 0x0F
print(f'B02a: {B02a:012b}', B02a)
print(f'B02b: {B02b:012b}', B02b)
print('---')
B02a = B02a << 4
B02b = B02b << 8
print(f'B02a: {B02a:012b}', B02a)
print(f'B02b: {B02b:012b}', B02b)
print('---')
X1 = B01 | B02a
X2 = B03 | B02b
print(f' X1: {X1:012b}', X1)
print(f' X2: {X2:012b}', X2)
print('---')
结果:
B01: 000001111000 120
B02: 000011000110 198
B03: 000011101011 235
---
B02a: 000011000000 192
B02b: 000000000110 6
---
B02a: 110000000000 3072
B02b: 011000000000 1536
---
X1: 110001111000 3192
X2: 011011101011 1771
位符合预期,但您错误地将 110001111000
转换为 12768
,因为它给出了 3192
.
int('110001111000', 2) # 3192
这个函数的输入是一个列表中的三个字节。 (B01, B02, B03) (124,102,235) 取第二个字节并将其一分为二 取前 4 位(最低位)并将它们存储到变量中 (B02a) 将最后 4 位(最重要的)存储到另一个变量 (B02b)。
你对 python 有什么想法吗?
我试过了
input_list= (120,198,235)
byte_list =bytearray(input_list)
middle_var=byte_list[1]
print(middle_var)
print(type(middle_var))
删除最后 4 个字符
B02b = middle_var[:6]
print(B02b)
删除前 4 个字符
B02a = middle_var[4:]
but didnt worked
它应该是这样的。
(01111000 11000110 11101011)
(**1100** *0110* ) these from the middle (396) split in 2 * 4 bits
(110001111000 *0110*11101011)
结果应该是 12768 110001111000 和 1771 *0110*11101011
您可以使用位移动和“&”运算符来计算 B02a 和 B02b。请像这样更改您的代码。
B02a = B02 & 15
B02b = B02 >> 4
使用按位运算符
B01, B02, B03 = (120,198,235)
print(f' B01: {B01:012b}', B01)
print(f' B02: {B02:012b}', B02)
print(f' B03: {B03:012b}', B03)
print('---')
B02a = B02 & 0xF0
B02b = B02 & 0x0F
print(f'B02a: {B02a:012b}', B02a)
print(f'B02b: {B02b:012b}', B02b)
print('---')
B02a = B02a << 4
B02b = B02b << 8
print(f'B02a: {B02a:012b}', B02a)
print(f'B02b: {B02b:012b}', B02b)
print('---')
X1 = B01 | B02a
X2 = B03 | B02b
print(f' X1: {X1:012b}', X1)
print(f' X2: {X2:012b}', X2)
print('---')
结果:
B01: 000001111000 120
B02: 000011000110 198
B03: 000011101011 235
---
B02a: 000011000000 192
B02b: 000000000110 6
---
B02a: 110000000000 3072
B02b: 011000000000 1536
---
X1: 110001111000 3192
X2: 011011101011 1771
位符合预期,但您错误地将 110001111000
转换为 12768
,因为它给出了 3192
.
int('110001111000', 2) # 3192