gpt4 book ai didi

计算 16 位校验和?

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

使用 c 语言的程序读取文件,然后我必须为程序执行 8 位和 16 位校验和。到目前为止,我只完成了 8 位校验和。

这是我的理解

我读取文件并将信息存储在字符数组中,最后它采用换行符。例如计算 8 位校验和,这就是本质上发生的事情

文件共有 3 个字母(3 个 a 和一个换行符)

so 数组包含 4 个字符 aaa+(newline) (97+97+97+10)

据我了解,我添加了数组中的所有字节,然后执行 % 256,这就是我的校验和。

97 * 3 =//根据我的理解从ascii表中提取3个a(小a)

291 + 10 = 301//+ 换行符

301 % 256 = 十六进制抄送//

但是我对如何计算 16 位校验和感到困惑,因为如果它是单个字符数组,我无法一次添加 2 个字符?

任何帮助将不胜感激

最佳答案

要计算 16 位校验和,请以 2 为增量处理数组,并将一个字节放入要添加的值的低位字节中,将另一个字节放入高位字节中。

uint8_t array[MAX]; // The data gets copied into here
size_t length; // This is the length of the data
uint16_t checksum = 0;
size_t even_length = length - length%2; // Round down to multiple of 2
for (int i = 0; i < even_length; i += 2) {
uint16_t val = array[i] + 256 * array[i+1];
checksum += val;
}
if (i < length) { // Last byte if it's odd length
checksum += array[i];
}

无需使用模数,因为无符号整数自动实现模运算。

关于计算 16 位校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52980000/

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