消息关闭
    暂无新消息!

C语言 16进制校验和

问题作者 : Deanna2017-08-16发布
我收到了一组数据,每位都是16进制数,我想要计算校验和,如何计算?
例如AA C0 D4 04 3A 0A A1 60 1D AB
AA C0是报文头和指令号
D4 04 3A 0A 是数据
A1 60是ID
1D是校验和 AB是报文尾
4+4+A+A+1=1D
求算法

7个回答

︿ 1
//例如AA C0 D4 04 3A 0A A1 60 1D AB
//AA C0是报文头和指令号
//D4 04 3A 0A 是数据
//A1 60是ID
//1D是校验和 AB是报文尾
//4+4+A+A+1=1D
//求算法
#pragma warning(disable:4305 4309)
#include <stdio.h>
char pack[256];
char checksum(int from,int to) {
    int j,sum;

    sum=0;
    for (j=from;j<to;j++) {
        sum+=pack[j]&0x0F;
    }
    return (char)(sum&0xFFu);
}
int main() {
    char data[4]={0xD4,0x04,0x3A,0x0A};
    int L=4,n,i;

    pack[0]=0xAA;
    pack[1]=0xC0;

    for (i=0;i<L;i++) pack[2+i]=data[i];
    pack[2+i]=0xA1;         i++;
    pack[2+i]=0x60;         i++;
    pack[2+i]=checksum(2,2+i);   i++;
    pack[2+i]=0xAB;         i++;
    n=2+i;
    for (i=0;i<n;i++) {
        printf("%02X ",(unsigned char)pack[i]);
    }
    printf("\n");
    return 0;
}
//AA C0 D4 04 3A 0A A1 60 1D AB
//
︿ 1
亲,我会手算,但是单片机不会
我能写十进制的,但是16进制把我憋死了
︿ 1
我会十进制的
输入数组shuru[] ;
//我们输入十进制数组,第0,1位是报文头和指令号,2~7位是要计算的部分,8位是校验和,9位是报文尾

void main ()
{
int jiaoyanhe = 0;
for(int i = 2; i <=7;i++){
jiaoyanhe = jiaoyanhe +  shuru[i]/10*10;
}
if(shuru[8] = jiaoyaoyanhe){
return 1;
}
else{
return 0;
}
}