我有这个工作代码,但它看起来太复杂了,它确实做了什么。
基本上我想基于从字节对象中提取的特定位来创建一个十六进制字(该字符串是一个VISCA PTZ字符串)。在这个例子中,所需的结果是0x00(或其十进制等效,这并不重要),但如果涉及更多位,也可以是0x0000。
aa = b'\x80\x01\x04\x48\x00\xff'
# extract these --^---^
bb = b""
cc = 0
for i in range(0, len(aa), 1):
partial = aa[i:i+1]
if i == 2:
j = [partial[0] & b'\x0f'[0]]
cc = cc << 4 | j[0]
elif i == 3:
j = [partial[0] & b'\x0f'[0]]
cc = cc << 4 | j[0]
bb = bb + partial
print (cc) # gives 72 = 48 hex (which is the intended result)
也许稍后我还需要更改一些位并将其放回字节字符串(此代码还没有代码)。
我通过直接读取原始字节字符串的成员来玩了一下,但我搞砸了不同对象类型之间的冲突。
有更简单优雅的方法吗? (Python 3.5)
答案 0 :(得分:1)
aa = b'\x80\x01\x04\x48\x00\xff'
part1, part2 = aa[2] & 0xf, aa[3] & 0xf
print(hex(part1 << 4 | part2))
对于更多部分,表达式将更复杂,但仍比您所做的更简单。