2013-02-20 87 views
1

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

我无法想象的是如何解决这种情况。我看过使用Guava的UnsignedBytes,但我找不到一个将其作为参数的散列方法。我可以使用它来编写我自己的散列函数,但坦率地说,我不太了解它是如何工作的,或者是一般的算术运算来做出合理的结果。

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

回答

8

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值。

+0

谢谢。愚蠢的错误。我在测试数据集中查看的值是最后一个值,我没有在循环结束时调用crc.reset(),而且我也不完全明白update()的作用。 – Nick 2013-02-20 15:14:00