Java中的无符号字节CRC32

Java中的无符号字节CRC32,java,hash,checksum,crc32,Java,Hash,Checksum,Crc32,我试图在Java中复制PHP中可用的CRC32哈希函数。Java中现有的CRC32类返回一个不同的散列,我相信这是因为我的字节数组中的Java字节是无符号的,从128到128,而不是0-255 我没有弄明白的是如何解决这种情况。我已经研究过如何使用Guava的UnsignedBytes,但是我找不到一个将其作为参数的散列方法。我可以用它来编写我自己的散列函数,但坦率地说,我对它的工作原理或一般的按位算术还不够了解,所以我不太可能做到这一点 用最简单的术语来说,我试图证明CRC32有一个字符串并返

我试图在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


使用提供了与上述Java代码相同的CRC值。

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


使用提供了与上述Java代码相同的CRC值。

谢谢。愚蠢的错误。我在测试数据集中看到的值是最后一个值,我没有在循环结束时调用crc.reset,我不完全理解更新做了什么。谢谢。愚蠢的错误。我在测试数据集中看到的值是最后一个值,在循环结束时我没有调用crc.reset,我不完全理解更新做了什么。