Başlığa bakın. Döndürülen değer 32 bit, değil mi? Neden bir int dönüş değil?Neden java.util.zip.CRC32.getValue() int uzun değil, int döndürüyor?
8
A
cevap
9
Çünkü bir int döndürdüğünde, CRC'lerin yarısı negatif olur. Beklenti, bir 32-bit CRC'nin imzasız, yani bir int içinde temsil edilemeyen 0..4294967295 işaretidir.
2
java.util.zip.CRC32
nedenle 32-bit sağlama için long
gerektiren getValue()
için long
dönüş türü gerektiren Checksum
arabirimini uygular; Çıkışın üst 32 biti neredeyse 0'dır.
Mark, cevap için teşekkürler. Bir takipim var: Son baytları önceki tüm baytların bir CRC'si olan dosyaları okuyorum ve yazarım. CRC 4 bayta sığmalıdır. Bu yüzden, uzun CRC'nin üst 4 baytını görmezden gelemem, olabilir mi? Uzun olanı "imzasız" bir temsile dönüştürmem gerekecek mi? – Steveo
Tanım olarak, 32 bit CRC, uzunluğun düşük dört baytına sığar. Java'da imzalanmamış 32 bit tür yok. –