我正在尝试在 Java 中复制 PHP 中可用的 CRC32 散列函数。 Java 中现有的 CRC32 类返回不同的哈希,我相信这是因为我的字节数组中的 Java 字节是无符号的 -128 到 128,而不是 0-255。
我想不出的是如何解决这种情况。我看过使用 Guava 的 UnsignedBytes,但找不到将其作为参数的散列方法。我可以用它来编写我自己的哈希函数,但坦率地说,我对它的工作原理或一般的按位算术知之甚少,无法做到这一点。
用最简单的术语来说,我正在尝试 CRC32 有一个字符串并返回十进制表示。
最佳答案
CRC 不关心符号。
Java 的 CRC32 给我的结果与 PHP 的相同。
public static void main(String[] args) {
String a = "Hello World!";
CRC32 crc = new CRC32();
crc.update(a.getBytes());
System.out.println(Long.toHexString(crc.getValue()));
}
输出:1c291ca3
使用 this online PHP CRC32 calculator给出了与上述 Java 代码相同的 CRC 值。
关于java - Java 中的无符号字节 CRC32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980625/