技术解析

二进制数据累加求和,取低八位
0
2021-06-02 16:41:34
idczone

以下是 16 进制表示,我把每一抗投诉服务器个 16 进制转换成 10 进制,然后进行累加,得到 2551

echo 2551&0xff;

转换成 16 进制是f7

5a 54 08 1f 01 01 61 00 50 53 0a 09 4e 01 64 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 50 53 0a 09 4f 03 64 00 00 00 00 00 00 00 50 53 0a 09 46 04 64 00 00 00 00 00 00 00 50 53 0a 0a 09 05 64 00 00 00 00 00 00 00 50 53 0a 0a 08 06 64 00 00 00 00 00 00 00 50 53 0a 09 34 07 64 00 00 00 00 00 00 00 50 53 0a 0a 0a 08 64 00 00 00 00 00 00 00

但是硬件那边传过来的求和校验是0x47,是我哪里算错了吗


明明加起来是 2631,不知道你为什么能得到 2551

>>> sum([int(x, 16) for x in '''5a 54 08 1f 01 01 61 00 50 53 0a 09 4e 01 64 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 50 53 0a 09 4f 03 64 00 00 00 00 00 00 00 50 53 0a 09 46 04 64 00 00 00 00 00 00 00 50 53 0a 0a 09 05 64 00 00 00 00 00 00 00 50 53 0a 0a 08 06 64 00 00 00 00 00 00 00 50 53 0a 09 34 07 64 00 00 00 00 00 00 00 50 53 0a 0a 0a 08 64 00 00 00 00 00 00 00'''.strip().split()])
2631

uint8_t test_list[]={0x5a,0x54,0x08,0x1f,0x01,0x01,0x61,0x00,0x50,0x53,0x0a,0x09,0x4e,0x01,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x53,0x0a,0x09,0x4f,0x03,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x53,0x0a,0x09,0x46,0x04,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x53,0x0a,0x0a,0x09,0x05,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x53,0x0a,0x0a,0x08,0x06,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x53,0x0a,0x09,0x34,0x07,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x53,0x0a,0x0a,0x0a,0x08,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int main(int argc,char *argv[])
{
uint8_t rst = 0;
for(int i=0;i {
rst += test_list[i];
}
printf("%d 0x%02x",rst,rst);
}
gcc .\test6_sig.c -m32
.\a.exe
-> 71 0x47

谢谢大家,原来我自已程序过滤了一个字节,导致结果错误了,2631 是对的

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服