2010-11-15 65 views
1

我需要將這些C函數轉換爲C#。只是想仔細檢查一下我是否做得對。謝謝!CRC功能。將C轉換爲C#

C代碼:

unsigned short Crc; 

unsigned short update_crc(unsigned short crc, char c) { 
    char i; 

    crc ^= (unsigned short)c<<8; 
    for (i=0; i<8; i++) { 
     if (crc & 0x8000) crc = (crc<<1)^0x1021; 
     else crc <<=1; 
    } 
    return crc; 
} 


void exampleCRC(void){ 

#define INITIAL_CRC 0xffff 

unsigned short Crc = INITIAL_CRC; 
record_t record; 

    for (byteCount=0; byteCount<sizeof(record_t); byteCount++) { 
     Crc = update_crc(Crc, record[byteCount]); 
    } 
} 

C#代碼:

ushort UpdateCrc(ref ushort crc, byte b) 
{ 
    crc ^= (ushort)(b << 8); 

    for (int i = 0; i < 8; i++) 
    { 
     if ((crc & 0x8000) > 0) 
      crc = (ushort)((crc << 1)^0x1021); 
     else 
      crc <<= 1; 
    } 

    return crc; 
} 

ushort CalcCrc(byte[] data) 
{ 
    ushort crc = 0xFFFF; 

    for (int i = 0; i < data.Length; i++) 
     crc = UpdateCrc(ref crc, data[i]); 

    return crc; 
} 
+0

兩個字:單元測試! – vcsjones 2010-11-15 03:46:45

+0

是的,好主意。謝謝! – Matt 2010-11-15 03:52:32

回答

3

似乎沒什麼問題,除非你真的因爲你返回不需要爲UpdateCrc一個ref參數無論如何,修改後的值。

+0

好的。感謝那! – Matt 2010-11-15 03:51:51

0

您是否嘗試過在各種不同的值上運行測試?

也可能讓他們static職能(如果這不是你的計劃已經),因爲他們似乎不需要訪問任何對象狀態。

+0

聽起來不錯。謝謝! – Matt 2010-11-15 03:51:23