我的任務是實現基於J.G.的Checksum算法。弗萊徹校驗和ISO 8473-1:1998年,描述像這樣:基於J.G.的校驗和算法Fletcher
然後,他們的列表,可以進行檢查,看是否該算法中是正確的,但我的版本在最後兩個值失敗4個數據。
0000給人FFFF
0000'00的校驗提供了FFFF的校驗
ABCDEF'01給出9CF8
1456'F89A'0001校驗給人24DC
我已經工作這幾個小時,並且找不到我做錯了什麼,一組新的眼睛可以幫助很大。
這裏是我的功能:
uint16 Crc_CalculateISOChecksum(uint8 *pt_start_address, uint32 length)
{
uint8 C0, C1;
uint8 data;
uint32 i;
uint8 ck1, ck2;
/* Initial value */
C0 = 0;
C1 = 0;
/* memories - 32bits wide*/
for (i=0; i<length; i++) /* nb_bytes has been verified */
{
data = pt_start_address[i];
C0 = (C0 + data)%255;
C1 = (C1 + C0)%255;
}
/* Calculate the intermediate ISO checksum value */
ck1 = (unsigned char)(255-((C0+C1)%255));
ck2 = (unsigned char)(C1%255);
if (ck1 == 0)
{
ck1 = MASK_BYTE_LSB;
}
if (ck2 == 0)
{
ck2 = MASK_BYTE_LSB;
}
return ((((uint16)ck1)<<8) | ((uint16)ck2));
}
你說什麼是錯的...也許你也應該告訴我們,爲什麼你認爲,如果你想幫助... – Macmade
你得到一個錯誤?它是什麼?或者是輸出錯誤?怎麼樣? – Kevin
對不起,我猜這是不是很清楚我的問題是什麼。在問題描述中,有四個數據是根據他們應該生成的校驗和值給我的(0x0000 = 0xFFFF; 0x000000 = 0xFFFF; 0xABCDEF01 = 0x9CF8; 0x1456'F89A'0001 = 0x24DC)當我用我的函數嘗試它時,前兩個數據產生期望的校驗和,其他數據不給我期望值 – Leo