我传输的数据如下:[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 - ?
答案 0 :(得分:2)
正如评论者所说,你的代码示例没有位而是字节。我假设你真的想要一些名为data的字节数组中的最后15位,并且你检查过数据至少有2个字节 它就像
一样简单short crc = (data[data_length - 2] & 0x7f) | data[data_length - 1];
旁注:也许你已经意识到这一点,但15位CRC并不是最可靠的东西(但很快)。如果你的数据并不完全不重要,那么一些更好的算法可能是有意义的(SHA,或者取决于用例,比如ReedSolomon-encoding等等。)