字节数据采用小端格式,来自 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
# --