UInt16 CheckSumUpdate (LOG_ENTRY_TYPE* pointer, UInt16 size)
{
UChar* data;
data = pointer;
UInt16 chk = 0;
while (size--)
{
chk += *data++;
}
return chk;
}
//message data structure typedef
typedef struct
{
TIMESTAMP_TYPE oTimeStamp;
ASSERT_ID_TYPE ucAssertID;
Int16 iData1;
Int16 iData2;
UInt16 uiChecksum;
}
LOG_ENTRY_TYPE;
TIMESTAMP_TYPE 是一个具有 16 位毫秒计数器和 32 位秒计数器的结构体,而 ASSERT_ID_TYPE 只是一个枚举列表,其中包含我在操作时要检查的一堆内容。
所以这种方法可行,但一旦值高于 255,就会发生一些不好的事情。我知道无符号字符 (UChar) 可以表示最多 255 的数字,但如果我将 UChar 更改为 UInt16,我也不会得到正确的答案。有人可以在这里指出我的问题吗?
最佳答案
UInt32 chk = 0;
chk += data->iData1;
chk += data->iData2;
https://en.wikipedia.org/wiki/Struct_(C_programming_language)
关于结构体的校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067696/