2013-06-12 8 views

Antwort

9

Weil, wenn es ein int zurückgab, die Hälfte der CRCs negativ wäre. Die Erwartung ist, dass ein 32-Bit-CRC unsigniert ist, d. H. 0..4294967295, der nicht in einem int dargestellt werden kann.

+0

Mark, danke für die Antwort. Ich habe ein Follow-up: Ich lese und schreibe Dateien, deren letzte Bytes eine CRC aller vorhergehenden Bytes sind. Die CRC muss in 4 Bytes passen. Ich kann also nicht einfach die oberen 4 Bytes der langen CRC ignorieren, oder? Ich müsste die lange in eine "unsigned" Darstellung zuerst rechts konvertieren? – Steveo

+1

Per Definition passt ein 32-Bit-CRC in die unteren vier Byte des langen. In Java gibt es keinen vorzeichenlosen 32-Bit-Typ. –

2

java.util.zip.CRC32 implementiert die Checksum-Schnittstelle, die einen long Rückgabetyp für getValue() erfordert daher ein long für ein 32-Bit-Prüfsumme erfordern; die oberen 32 Bits des Ausgangs sind fast definitiv 0.

Verwandte Themen