我被要求对以下文本进行16位校验和:
"AAAAAAAAAA\nX"
起初,描述似乎想要Fletcher-16校验和。但是,对上述文本执行Fletcher的校验和得到的结果为8aee(十六进制)。示例文件表明模数和算法(减去二的补码)应该在十六进制下输出509d。
唯一的其他信息是标准的“每两个字符应添加到校验和中”。
除了使用相应维基百科页面上提供的通用Fletcher-16校验和之外,我还尝试了在此处找到的解决方案:calculating-a-16-bit-checksum,但并未成功。该代码生成了十六进制值4f27。
"AAAAAAAAAA\nX"
起初,描述似乎想要Fletcher-16校验和。但是,对上述文本执行Fletcher的校验和得到的结果为8aee(十六进制)。示例文件表明模数和算法(减去二的补码)应该在十六进制下输出509d。
唯一的其他信息是标准的“每两个字符应添加到校验和中”。
除了使用相应维基百科页面上提供的通用Fletcher-16校验和之外,我还尝试了在此处找到的解决方案:calculating-a-16-bit-checksum,但并未成功。该代码生成了十六进制值4f27。
unsigned char*
,否则在恐龙般的非二进制补码机器上,data[i] != '\0'
(两个零)和(unsigned char)data[i]
是不正确的。在 16 位int
中,(unsigned char)data[i] << 8
存在溢出风险。无论如何最好使用unsigned sum
和"%04x"
来避免在 32 位机器上当sum < 0
时输出 8 位数字。 - chux - Reinstate Monicadata[i] != '\0'
是不正确的? - MikeCAT