Xem tiêu đề. Giá trị trả về là 32 bit, phải không? Tại sao không trả lại một int?Tại sao java.util.zip.CRC32.getValue() trả về một, không phải là int?
8
A
Trả lời
9
Bởi vì nếu nó trả về một int, một nửa số CRC sẽ là số âm. Kỳ vọng là CRC 32 bit không được ký, tức là 0..4294967295, không thể được biểu diễn trong một int.
2
java.util.zip.CRC32
cài đặt giao diện Checksum
, đòi hỏi một loại long
để đổi lấy getValue()
, do đó đòi hỏi một long
cho một checksum 32-bit; 32 bit trên của đầu ra gần như chắc chắn 0.
Đánh dấu, cảm ơn câu trả lời. Tôi có theo dõi: Tôi đang đọc và ghi các tệp có byte cuối cùng là CRC của tất cả các byte trước đó. CRC phải phù hợp với 4 byte. Vì vậy, tôi không thể bỏ qua 4 byte trên của CRC dài, phải không? Tôi sẽ cần phải chuyển đổi dài để một "unsigned" represention đầu tiên phải không? – Steveo
Theo định nghĩa, CRC 32 bit phù hợp với bốn byte dài của độ dài. Không có kiểu 32-bit chưa ký trong Java. –