我正在开发一个实时应用程序,我必须尽快处理一行数据,才能将其发送到应用程序。这些线路到达的速度非常快,大约每分钟40k。任务是从行中的hexa数据中提取某些单个位的值。我已经有了一个解决方案,但我怀疑这是最有效的,所以我想问你是否可以改进它。你知道吗
数据样本行:
p1 p2 p3 len data
1497383697 0120 000 5 00 30 63 4f 15
len是数据中有多少字节,data是我们正在处理的。假设我想从左边的第11位开始提取3位。使用填充将十六进制转换为二进制:
0x0030634f15=0000 0000 0011 0000 0110 0011 0100 1111 0001 0101
需要的值是0b110,它是十进制的6。你知道吗
我的解决办法是:
# 11 and 3 in the example
start = config.getint(p, 'start')
length = config.getint(p, 'length')
parts = line.split()
hexadata = ''.join(parts[4:])
bindata = bin(int(hexadata, 16))[2:].zfill(len(hexadata) * 4)
val = int(bindata[start:start + length], 2)
val最终将保持值6。还有其他更有效的方法吗?谢谢
将输入转换为数字并使用位操作比使用字符串操作更快:
根据我的计时,位运算快了大约20%。100万次迭代的计时结果:
相关问题 更多 >
编程相关推荐