gpt4 book ai didi

java - java 中的 CRC-CCITT 验证 (android)

转载 作者:行者123 更新时间:2023-12-01 05:44:50 27 4
gpt4 key购买 nike

嗨我通过蓝牙连接接收了一些数据。该数据有一个 16 位 CRC 16-CCITT block ,我想使用它来验证数据是否已成功传输且没有错误。java或android中是否有任何内置方法可以帮助我,或者我需要自己实现它?我需要对数据进行编码并进行比较吗?我有一个在网上找到的代码 fragment ,但我不确定它是否正确或有效。它位于: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 实现。我可以在这里使用它吗?

谢谢。

最佳答案

效率非常低。 Internet 上有一个表驱动版本,最初是在 20 世纪 80 年代用 C 编写的,运行速度至少是原来的 8 倍。 Wikipedia article似乎提供了一些链接。

关于java - java 中的 CRC-CCITT 验证 (android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com