2013-02-20 86 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