十六进制字符串 Python 的校验和



这里是十六进制字符串: 57 F1 0F 9A A8 B7 00 08 0B 19

10 00 00 00 00 00 11 0B 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00A8 和 B7 是我需要计算的校验和

在 C 中,它是这样计算的(100% 有效):

void ByteStream_ComputeCS(void)
{
int i;
DWORD cs = 0;
for (i = 0; i < ByteStream[2] + 3; i++)
{
if (i != 2) cs += *((WORD*)ByteStream + i);
}
cs = (cs & 0xFFFF) + (cs >> 16);
ByteStream[4] = (BYTE)cs;
ByteStream[5] = (BYTE)(cs >> 8);
}

我试图这样做:

data = bytearray.fromhex('57 F1 0F 9A 00 00 00 08 0B 19 10 00 00 00 00 00 11 0B 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00')
c_sum = sum(data)

我只是用 0 替换校验和 - 在 C 中它只是不求和

if (i != 2) cs += *((WORD*)ByteStream + i);

但我得到0x25e。并且无法将其带到A8和B7。 我做错了什么?

所以我明白我必须对 57F1 + 0F9A + .... 求和,但

data = bytearray.fromhex(....)
c_sum = sum(data)

我这样做就像 57 + F1 + 0F + 9A +..

解决它的方法,我发现:

def HexToByte(hexStr):
bytes = []
hexStr = ''.join(hexStr.split(" "))
for i in range(0, len(hexStr), 4):
bytes.append(int(hexStr[i:i + 4], 16))
return bytes

然后总结一下。没关系 但是还有其他方法吗?

最新更新