在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;
}