计算CRC16校验和

时间:2015-01-11 16:37:29

标签: c++

我正从文件中读取(二进制)数据并生成CRC16校验和。下一步是在此文件的末尾写入此校验和(作为最后2个字节),然后再次计算CRC16,该值应为0.问题是我写入文件的CRC是不同的。例如,我最后使用write(reinterpret_cast<const char *>(&crc), 2)来编写short int crc = 0xba10,但事实上我正在编写ş 00010000 11000101 10011111不是10111010 00010000。有没有办法在文件末尾正确编写它?

这是我的crc计算代码:

int crc16(char* data_p, int length){
unsigned char x;
unsigned short crc = 0x1D0F; 

while (length--){
    x = crc >> 8 ^ *data_p++;
    x ^= x >> 4; // x = x ^ (x >> 4)
    crc = (crc << 8) ^ ((unsigned short)(x << 12)) ^ ((unsigned short)(x <<5)) ^ ((unsigned short)x);
}
return crc;
}

0 个答案:

没有答案