字节串和 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())
我正在将一些 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())