从任何大小的位阵列获得15位CRC

时间:2015-01-05 10:30:45

标签: java c crc

我传输的数据如下:[DATA - 任意大小的位数组] [CRC 15位]。

如何从任意大小的位阵列获得15位CRC以检测原始数据的意外更改?

这里是代码的开头:

byte crc[15];
int data_length = *any size*;
byte data[data_length];    // for example data = {1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,0,1,0,1,1}
crc = get_crc(crc);

get_crc - ? 

1 个答案:

答案 0 :(得分:2)

正如评论者所说,你的代码示例没有位而是字节。我假设你真的想要一些名为data的字节数组中的最后15位,并且你检查过数据至少有2个字节 它就像

一样简单
short crc = (data[data_length - 2] & 0x7f) | data[data_length - 1];  

旁注:也许你已经意识到这一点,但15位CRC并不是最可靠的东西(但很快)。如果你的数据并不完全不重要,那么一些更好的算法可能是有意义的(SHA,或者取决于用例,比如ReedSolomon-encoding等等。)