我正在尝试复制Java中的PHP中可用的CRC32哈希函数。 Java中现有的CRC32类返回不同的哈希,我相信这是因为我的字节数组中的Java字节是无符号-128到128而不是0-255。
我没想到的是如何解决这种情况。我已经看过使用Guava的UnsignedBytes,但我找不到将其作为参数的散列方法。我可以用它来编写我自己的散列函数,但坦率地说,我对它的工作方式或者一般的逐位算术都不够,以使其合理化。
用最简单的术语我试图CRC32有一个字符串并返回十进制表示。
答案 0 :(得分:9)
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提供的CRC值与上述Java代码相同。