我正从文件中读取(二进制)数据并生成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;
}