我在python 2.7中使用bytearray来解析来自串行端口的数据流。我正面临一个奇怪的行为:我试图计算接收包的校验和以检查其有效性,但是我对bytearray上的sum()
函数有问题。我本以为,作为字节数组,它会把每个字节相加,对吧?只是没有。。
例如:我有这个包
str = '200a02daffe0fe3d140500f6fff6ff6df42c0aabfe'
b = bytearray(str)
总结其内容输出:
sum(b)
3263
正确的结果是
2915
至少这是计算器说的。 此函数:
def somma_hex(str):
s = 0
for i in range(0,len(str)-1,2):
s += int(byte[i:i+2],16)
输出正确的值2915。
没什么大不了的,我可以用我写的简单函数来代替sum()
但是我想知道,发生了什么?
谢谢
Bytearray有42个8位元素,由sum()解析。 在somma_hex中,您将它分成两个字节块,并将它们解析为16位整数。 事实是显而易见的。
相关问题 更多 >
编程相关推荐