用Java计算CRC32b

用Java计算CRC32b,java,crc32,Java,Crc32,我使用java.util.zip.CRC32,据我所知,它实现了CRC32(而不是CRC32b),但似乎我需要使用CRC32b而不是CRC32 是否有Java开源代码可用于CRC32b计算?如果我没记错的话,CRC32b是一个虚构的术语,等于CRC32,4个字节颠倒 int crc32b(int crc) { ByteBuffer buf = ByteBuffer.allocate(4); buf.putInt(crc); // BIG_ENDIAN by default.

我使用java.util.zip.CRC32,据我所知,它实现了CRC32(而不是CRC32b),但似乎我需要使用CRC32b而不是CRC32


是否有Java开源代码可用于CRC32b计算?

如果我没记错的话,CRC32b是一个虚构的术语,等于CRC32,4个字节颠倒

int crc32b(int crc) {
    ByteBuffer buf = ByteBuffer.allocate(4);
    buf.putInt(crc); // BIG_ENDIAN by default.
    buf.order(ByteOrder.LITTLE_ENDIAN);
    return buf.getInt(0);
}
例如,对于输入“1”:

byte b = (byte) '1';
CRC32 crc = new CRC32();
crc.update(b);

System.out.printf("%x%n", crc.getValue());
int finalCRC = crc32b((int)crc.getValue());
System.out.printf("%x%n", finalCRC);
输出:

83dcefb7
b7efdc83

给出您的示例,结论是:java CRC32(无反转)很好。

当输入仅为1(数字)时,我比较了您的代码输出,它输出16777216,而在线crc32b计算器输出83dcefb7,所以我猜它不一样。谢谢。做了一次搜索,找到了,但我相信你的CRC32b更多。扩展了答案,得出了毁灭性的结论,CRC32似乎很好。我不确定我是否了解你。在代码中,您将crc(类型为CRC32)传递给方法crc32b,该方法需要int.Plus,我无法编译System.out.println(“%x%n”,crc.getValue());我错过什么了吗?