В настоящее время принятый ответ неверен.
Начальное значение для класса CRC32 в Java - 0, а не 0xFFFFFFFF, как видно из исходного кода функции сброса:
/**
* Resets CRC-32 to initial value.
*/
public void reset() {
crc = 0;
}
https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/util/zip/CRC32.java#L81
Я провел быстрый перебор, и оказалось, что обновление CRC со значением 0xFFFFFFFF
фактически даст то же самое значение.Поэтому, если вы хотите, чтобы алгоритм CRC32 имел начальное значение 0XFFFFFFFF
, просто выполните:
CRC32 crc = new CRC32();
// Set the initial value to 0xFFFFFFFF
crc.update(new byte[]{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF});
System.out.println("CRC: " + crc.getValue()); // prints 4294967295, which is 0xFFFFFFFF