我有这个工作代码,但是它看起来太复杂了。
基本上,我想根据从字节对象提取的特定位创建一个十六进制单词(字符串是Visca Ptz字符串)。在此示例中,所需的结果的形式为0x00(或其十进制等效的,这并不重要),但是如果涉及更多位,也可以作为0x0000。
aa = b'x80x01x04x48x00xff'
# 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)
aa = b'x80x01x04x48x00xff'
part1, part2 = aa[2] & 0xf, aa[3] & 0xf
print(hex(part1 << 4 | part2))
对于更多零件,表达式将更加复杂,但仍然比您所做的要简单。