gpt4 book ai didi

C/C++ 校验位

转载 作者:行者123 更新时间:2023-11-30 14:29:11 24 4
gpt4 key购买 nike

我正在编写一个函数来根据给定的字符串构建校验和。

校验和定义为: 校验和之前一行所有字符(包括STX和CR)的二进制和的低7位的2的补码。

到目前为止我想出了:

CheckDigit = getcheckdigit(buffer);
sprintf(buffer,"%c%c%c%s%s%c%c",
2,
iDP,
iStatus,
my_ltoa(s,NetWeight,7,0x00),
my_ltoa(t,TareWeight,6,0x00),
13,
CheckDigit);

int getcheckdigit(char *buffer) {

int checkdigit,i;
int sum;
char *ptr;

for (i=0;i<=16;i++) {
*ptr=buffer[i];
sum = sum + atoi(ptr);
}

sum = sum % 64;

checkdigit = ~sum;
checkdigit = checkdigit + 1;

return checkdigit;
}

这似乎返回相同的值,我无法弄清楚为什么,因为我无法调试它。

最佳答案

您的金额尚未初始化。

您正在引用一个未定义的指针 (ptr)。

你不需要 atoi。

您只使用了底部 6 位。

二进制补码只是一个否定(尽管你的二进制不是并且加 1 应该可以)。

尝试:

int getcheckdigit(char *buffer) {

int i;
int sum = 0;

for (i=0;i<=16;i++) {
sum += buffer[i];
}

sum = -(sum % 128);

return sum;
}

关于C/C++ 校验位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5166221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com