python的bitstring模块按位运算

问题描述 投票:0回答:0

字节数据采用小端格式,来自 Victron Battery Smart Shunt 的嵌入式芯片。

并非所有位数据字段都在 8 字节段中,有些是 2、10、20 和 22 位长。

假设需要进行按位运算。

我总是发现如果代码稍后出现横向变化,那么在没有大量思考时间的情况下,按位运算很难理解实际发生的情况。

我喜欢更简单的代码,随着时间的推移,它更容易跟踪和遵循我正在做的事情。

Python 位串模块 使用过

在第一个调用中,我在应用小端调用并将其转换回位字符串时,在特定偏移处获取数据。

第二个调用我使用字符串切片来获取我需要的 10 位,然后将其转换回 int。

我是否缺少任何现有的位串调用,这些调用可能会使这变得更容易或更优雅?

有任何想法或建议,或者这是完成此类操作的一种方式吗?

import bitstring

data =  b'720\x05\x00\x00\x00\x00K\xf9\xff\n\x00 \xfe\xb8'
# --
bits = bin(bitstring.BitArray(bytes=data, offset=104, length=16).uintle)
result = bitstring.BitArray(bin=f"0b{bits[4:14]}").uint / 10
# --
print(bits)
# 0b1111111000100000 the required bits converted using little endian formatting
# --
print(result)
# 99.4
# --
python bit-manipulation bit bitstring
© www.soinside.com 2019 - 2024. All rights reserved.