C-剥离最低有效字节

C-剥离最低有效字节,c,byte,checksum,C,Byte,Checksum,我正在做一个作业,它要求我通过去掉整数的1补码版本的最低有效字节来计算校验和 这是作业大纲中我感到困惑的部分: “校验和字段(MM)值是通过取计数、地址和的1的补码值的最低有效字节来计算的 “和记录的数据字段” 我有点不清楚这意味着什么,因为我还没有真正使用C语言中的补语或LSB 到目前为止,我得到的是: int checkSum(int count, int address, char* data) { int i = 0; int dataTotal = 0; for(i = 0; i &

我正在做一个作业,它要求我通过去掉整数的1补码版本的最低有效字节来计算校验和

这是作业大纲中我感到困惑的部分:

“校验和字段(MM)值是通过取计数、地址和的1的补码值的最低有效字节来计算的 “和记录的数据字段”

我有点不清楚这意味着什么,因为我还没有真正使用C语言中的补语或LSB

到目前为止,我得到的是:

int checkSum(int count, int address, char* data)
{
int i = 0;
int dataTotal = 0;

for(i = 0; i < strlen(data); i += 2)
{
    dataTotal += (getIntFromHex(data[i]) * 16) + getIntFromHex(data[i + 1]);
}

int checksum = ~(count + address + dataTotal) & 1;
printf("Checksum: %.2X\n", checksum);

return checksum;
}
int校验和(int计数、int地址、字符*数据)
{
int i=0;
int dataTotal=0;
对于(i=0;i
我真的没想到这会起作用,但我做了一些研究,这就是我想到的

我需要澄清最低有效字节的含义

另外,for循环的原因仅仅是为了得到数据的总数。这并不重要,但是代码使用了变量,所以我想我应该复制整个过程以避免混淆

我需要澄清最低有效字节的含义

最后一个有效字节表示数字mod 256,是从零到255的结果

unsigned leastSignificantByte(unsigned j)
{
    return j & 0xff;
}

你忘了问我们一个问题。你能具体说明你不明白的地方或你需要帮助的地方吗?你知道1的补语是什么吗?你知道最低有效字节是什么吗?另外,我在代码中看到对strlen的调用。但我不太确定字符串和什么有什么关系。听起来你的输入不是字符串。更新了我的问题。我只是想知道我如何做这个算法,规范不是很清楚。首先,int类型可能是一个问题,因为总和可能会溢出maxInt,从而导致UB。计算校验和、CRC等操作通常使用无符号类型执行。数据是字符串吗?计数和地址字段是单字节吗?如果不是,它们有多少字节,它们的字节顺序是什么?您有计算校验和的样本数据吗?你没有给我们提供足够的信息来解决这个问题,你也没有问我们一个足够具体的问题来回答你的问题。好吧,我会选择0xFFI。我同意,这可能更容易理解。