在C中为某些字符计算CRC16时出错

时间:2018-01-15 16:09:37

标签: c crc16

我正在尝试使用此代码来计算CRC16旁路。对于常规字符,它可以工作但是对于像3这样的十六进制序列,它会失败,而不会返回正确的值。对我来说很容易,通常我不会写C代码。

0xA0 0x00 0x01 0x01

1 个答案:

答案 0 :(得分:0)

strlen(s);用于查找字符串长度,而不是用于查找所使用的字符数组的长度,尤其是可能包含的字符数组的长度'\0'@Eugene Sh.

代码需要跟踪与另一个变量一起使用的数组大小。

// void append(char* s, char c) {
void append(char* s, size_t *sz, char c) {
  s[*sz] = c;
  (*sz)++;
}

...
size_t size = 0;
append(sss, &size, d);
append(sss, &size, d1);
append(sss, &size, d2);
append(sss, &size, d3);
unsigned char* uCB1 = (unsigned char*)sss;
unsigned short CRC= CalculateCRC(uCB1, size);

// printf("%s\n", sss);
write a loop to print each `sss[]`.