CheckSum表示结构

时间:2014-07-31 19:47:05

标签: c

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,我也没有得到正确的答案。有人可以在这里指出我的问题吗?

1 个答案:

答案 0 :(得分:1)

UInt32 chk = 0;
chk += data->iData1;
chk += data->iData2;

https://en.wikipedia.org/wiki/Struct_(C_programming_language)