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就会发生不好的事情。我知道unsigned char(UChar)可以表示最多255的数字但是如果我将UChar更改为UInt16,我也没有得到正确的答案。有人可以在这里指出我的问题吗?
答案 0 :(得分:1)
UInt32 chk = 0;
chk += data->iData1;
chk += data->iData2;
https://en.wikipedia.org/wiki/Struct_(C_programming_language)