在c中计算校验和(16位)
Calculating checksum (16 bit) in c
我被要求对这个位大小为 16 的文本进行校验和:
“AAAAAAAAAA\nX”
起初描述似乎需要 Fletcher-16 校验和。但是对上述文本执行的 Fletcher 校验和的输出以十六进制形式产生 8aee。示例文件说模求和算法(减去二进制补码)应该以十六进制输出 509d。
唯一的其他信息是标准“应将每两个字符添加到校验和”。
除了使用相应维基百科页面上提供的通用 Fletcher-16 校验和外,我还尝试使用此处找到的解决方案:calculating-a-16-bit-checksum 但无济于事。此代码生成 4f27.
的十六进制值
简单地添加数据,将其视为大端 16 位整数数组产生结果 509d
。
#include <stdio.h>
int main(void) {
char data[] = "AAAAAAAAAA\nX";
int sum = 0;
int i;
for(i = 0; data[i] != '[=10=]' && data[i + 1] != '[=10=]'; i += 2) {
int value = ((unsigned char)data[i] << 8) | (unsigned char)data[i + 1];
sum = (sum + value) & 0xffff;
}
printf("%04x\n", sum);
return 0;
}
我被要求对这个位大小为 16 的文本进行校验和: “AAAAAAAAAA\nX”
起初描述似乎需要 Fletcher-16 校验和。但是对上述文本执行的 Fletcher 校验和的输出以十六进制形式产生 8aee。示例文件说模求和算法(减去二进制补码)应该以十六进制输出 509d。
唯一的其他信息是标准“应将每两个字符添加到校验和”。
除了使用相应维基百科页面上提供的通用 Fletcher-16 校验和外,我还尝试使用此处找到的解决方案:calculating-a-16-bit-checksum 但无济于事。此代码生成 4f27.
的十六进制值简单地添加数据,将其视为大端 16 位整数数组产生结果 509d
。
#include <stdio.h>
int main(void) {
char data[] = "AAAAAAAAAA\nX";
int sum = 0;
int i;
for(i = 0; data[i] != '[=10=]' && data[i + 1] != '[=10=]'; i += 2) {
int value = ((unsigned char)data[i] << 8) | (unsigned char)data[i + 1];
sum = (sum + value) & 0xffff;
}
printf("%04x\n", sum);
return 0;
}