哪位高手帮我把下面这段代码改成c#的uint32_t crc16_table[256]; // CRC 表 // 构造 16 位 CRC 表 
void build_crc16_table(uint16_t crc16_cn) 

uint16_t i;
uint16_t j; 
uint16_t data; 
uint16_t accum;  for (i = 0; i < 256; i++) { 
data = (uint16_t)( i << 8 ); 
accum = 0; 
for (j = 0; j < 8; j++) { 
if ( ( data ^ accum ) & 0x8000 ) 
accum = ( accum << 1 ) ^ crc16_cn; 
else 
accum <<= 1; 
data <<= 1; 

crc16_table[i] = (uint32_t)accum; 

} // 计算 16 位 CRC 值,CRC-16 或 CRC-CCITT 
uint16_t get_crc16( uint8_t *data, uint32_t size) 

uint32_t i;   
uint16_t accum = 0x0;//init  //build_CRC16_table(CRC16_cn); // or cnCRC_CCITT 
for ( i = 0; i < size;) 
accum = (accum << 8) ^ (uint16_t)crc16_table[(accum >> 8) ^ data[i++]]; 
return accum; 
}

解决方案 »

  1.   

    仅供参考        uint[] crc16_table = new uint[256]; // CRC 表          // 构造 16 位 CRC 表  
            private void build_crc16_table(int crc16_cn)
            {
                int i;
                int j;
                int data;
                int accum;            for (i = 0; i < 256; i++)
                {
                    data = (i << 8);
                    accum = 0;
                    for (j = 0; j < 8; j++)
                    {
                        if (((data ^ accum) & 0x8000) !=0)
                            accum = (accum << 1) ^ crc16_cn;
                        else
                            accum <<= 1;
                        data <<= 1;
                    }
                    crc16_table[i] = (uint)accum;
                }
            }        // 计算 16 位 CRC 值,CRC-16 或 CRC-CCITT  
            int get_crc16(byte[] data, uint size)
            {
                uint i;
                int accum = 0x0;//init              //build_CRC16_table(CRC16_cn); // or cnCRC_CCITT  
                for (i = 0; i < size; )
                    accum = (accum << 8) ^ (int)crc16_table[(accum >> 8) ^ data[i++]];
                return accum;
            }