这是我的代码
data[12] = '\x18'
c = 4
d = c & data[12]
print d
输出/错误
Error: TypeError: unsupported operand type(s) for &: 'str' and 'int'
请帮助解决这个问题。
我需要从8位中提取哪个位高。
像这样'\x18'
有两位高我想拥有这些位置。
答案 0 :(得分:2)
d = c & ord(data[12])
您不能对字符串执行二进制算术,因此请将此字符串转换为数字。
在您的情况下,\xSOMETHING
表示单个(可能是不可打印的)字符,该字符在ASCII集中具有相应的位置。使用ord
检索它,返回一个数字(在您的情况下为24
)。
答案 1 :(得分:2)
您可以将单个字符转换为与ord
等效的整数。
d = c & ord(data[12])
如果您要转换多个字符(字节),请使用struct
module:
>>> import struct
>>> struct.unpack('>H', '\x02\x84')[0]
644
如果您正在解码构成结构的多个字节,这在您的注释中看起来非常有用。您可以一次解码整个数据包。