在Python 3中计算校验和十六进制

时间:2017-03-30 13:34:20

标签: python python-3.x hex ascii checksum

我想计算校验和。我想要做的过程如下;

步骤-1

a="10F8000041303131303030353000000000000000"

步骤-2

10+F8+00+00+41+30+31+31+30+30+30+35+30+00+00+00+00+00+00+00 = D0

步骤-3

~D0 = 2F -> 2F + 1 = 30

我试过了;

def calc_checksum_two(s):        
return '%2X' % (-(sum(ord(c) for c in s) % 256) & 0xFF)
print(calc_checksum_two(a))

结果;

3D

2 个答案:

答案 0 :(得分:2)

<p:ajax/>

答案 1 :(得分:0)

s="10F8000041303131303030353000000000000000sum(ord(c) for c in s)将对每个字符的每个ord值求和。这将总和[ord('1'), ord('0'), ord('F'), ...]。这不是你想要的。

从该字符串构建字节数组,您应该使用:

[ a[i:i+2]] for i in range(0, len(a), 2) ]

这会创建一个这样的数组:['10', 'F8', '00', ...]

然后将字符串hex / base16转换为整数使用int(hex_string,16)

应该这样做,但这是函数

def calc_checksum_two(a):
    return hex(((sum(int(a[i:i+2],16) for i in range(0, len(a), 2))%0x100)^0xFF)+1)[2:]