一种更优雅的方法,可以从Python中提取单个碎片



我有这个工作代码,但是它看起来太复杂了。

基本上,我想根据从字节对象提取的特定位创建一个十六进制单词(字符串是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))

对于更多零件,表达式将更加复杂,但仍然比您所做的要简单。

最新更新