您好 我有一些通过蓝牙连接接收的数据。 数据有一个16位CRC 16-CCITT块,我想用它来验证数据是否成功传输且没有错误。 在java或android中是否有任何内置方法可以帮助我或我需要自己实现它?我需要对数据进行编码并进行比较吗?我有一个代码片段,用于执行我在网上找到的代码,但我不确定它是正确还是有效。 它位于:http://introcs.cs.princeton.edu/java/51data/CRC16CCITT.java.html,代码为:
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
// byte[] testBytes = "123456789".getBytes("ASCII");
byte[] bytes = args[0].getBytes();
for (byte b : bytes) {
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7-i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit) crc ^= polynomial;
}
}
crc &= 0xffff;
System.out.println("CRC16-CCITT = " + Integer.toHexString(crc));
我还看到Java在http://download.oracle.com/javase/1.4.2/docs/api/java/util/zip/CRC32.html处有crc32的实现。这是我可以在这里使用的东西吗?
感谢。