java 中的 CRC-CCITT 验证 (android)
你好 我通过蓝牙连接接收了一些数据。 该数据有一个 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。这是我可以在这里使用的东西吗?
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是非常低效的。 Internet 上有一个最初在 20 世纪 80 年代用 C 语言编写的表驱动版本,运行速度至少是原来的 8 倍。 维基百科文章似乎提供了一些链接。
It is very inefficient. There is a table-driven version around the Internet written originally in C in the 1980s that runs at least 8 times as fast. The Wikipedia article appears to provide some links.