字节串和 int 的按位运算

Bitwise operations on byte string and int

我正在将一些 cython 代码转换为 python,在我进行按位运算之前一切顺利。这是代码片段:

in_buf_word = b'\xff\xff\xff\xff\x00'
bits = 8
in_buf_word >>= bits

如果我运行这个它会吐出这个错误:

TypeError: unsupported operand type(s) for >>=: 'str' and 'int'

我该如何解决这个问题?

右移8位就是去掉最右边的字节

因为您已经有了一个 bytes 对象,这可以更容易地完成:

in_buf_word = in_buf_word[:-1]

您可以通过将字节转换为整数、对其进行移位,然后将结果转换回字节字符串来实现。

in_buf_word = b'\xff\xff\xff\xff\x00'
bits = 8

print(in_buf_word)  # -> b'\xff\xff\xff\xff\x00'
temp = int.from_bytes(in_buf_word, byteorder='big') >> bits
in_buf_word = temp.to_bytes(len(in_buf_word), byteorder='big')
print(in_buf_word)  # -> b'\x00\xff\xff\xff\xff'
import bitstring

in_buf_word = b'\xff\xff\xff\xff\x00'
bits = 8
in_buf_word  = bitstring.BitArray(in_buf_word ) >> bits

如果你没有。转到您的终端机

pip3 install bitstring --> python 3
pip install bitstring --> python 2

要将其转换回字节,请使用 tobytes() 方法:

print(in_buf_word.tobytes())