在线校验和计算器如何工作?

How the Online Checksum Calculator works?

我有一个十六进制代码如下。

025001ef5401582102049123a715060e04311c032d0100000100da646405ffaab90000000e0c002a054b006e0000f10170000100050701f83fe40002000500009219120003000400014cc80004000400a1d0330005000400252e280010000201170012000e484c543530305f56333034373042001300143839363630333230323030303237383737363446001400011f0015000e01030200030004000501060007000016000202cb300900249906000232339907000131990800073030303839363399090005323033303090110001013010000601000201060130120004000000003013000900016200ec0040010030140005fdffff5f0b30150002000d3016000200213017000104301800020004301900020061301a0008017d0196012801d4901000010160c00002038860d000012862f000020000605000017f64900001006010000100500100010050020001015003000100500400010050050002000050060002155450070002155450080001005009000100500a000100500b000100500c000100500d000146500e000400000000500f00010050100004000000005011000400000000501200040000000050130004000000005014000400000000501500040000000050160004000007d45017000200295019000400000000501a0006020000000000501b000100501c0002003c501d0006000000000000

然后,我去https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/计算CheckSum8 Xor。结果returns "a0"。我想知道这个计算器是如何工作的。任何人都可以用 Python 功能向我解释吗?谢谢。

CheckSum8 Xor

我玩过你链接的工具,它似乎在使用 Parity word algorithm 在这种情况下你可以按如下方式计算它:

  1. 将您的十六进制字符串转换为 base-2(即由 0s 和 1s 组成)
  2. 将其分成块,每个块包含 8 位(base-2 数字)
  3. 全部异或

请注意,由于我们需要 4 位来写入一个十六进制数字,因此我们可能只需替换 1. 和 2. 使用 拆分成块,每个包含 2 个 base-16 数字 .

示例:输入为 ABCDEF 然后块为 ABCDEF 校验和为 AB xor CD xor EF 给出 89。在 python 中,这可能表示为

print(hex(0xAB ^ 0xCD ^ 0xEF))

输出

0x89