2

我正在尝试在 Java 中复制 PHP 中可用的 CRC32 散列函数。Java 中现有的 CRC32 类返回不同的哈希值,我相信这是因为我的字节数组中的 Java 字节是无符号的 -128 到 128 而不是 0-255。

我没有弄清楚如何解决这种情况。我看过使用 Guava 的 UnsignedBytes,但我找不到将它作为参数的散列方法。我可以用它来编写我自己的散列函数,但坦率地说,我对它的工作原理或一般的按位算术几乎没有足够的了解以使其合理化。

用最简单的术语来说,我试图 CRC32 有一个字符串并返回十进制表示。

4

1 回答 1

10

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

使用这个在线 PHP CRC32 计算器给出的 CRC 值与上面的 Java 代码相同。

于 2013-02-20T13:20:15.940 回答