繁体   English   中英

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

[英]Checksum for HEX string Python

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

A8和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

然后总结一下。 可以,但是还有其他方法吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM