为啥 java.util.zip.CRC32.getValue() 返回一个 long 而不是 int?
Posted
技术标签:
【中文标题】为啥 java.util.zip.CRC32.getValue() 返回一个 long 而不是 int?【英文标题】:Why does java.util.zip.CRC32.getValue() return a long, not an int?为什么 java.util.zip.CRC32.getValue() 返回一个 long 而不是 int? 【发布时间】:2013-06-09 05:06:30 【问题描述】:见标题。返回值是 32 位,对吧?为什么不返回一个 int?
【问题讨论】:
【参考方案1】:java.util.zip.CRC32
实现了Checksum
接口,该接口需要getValue()
的返回类型为long
,因此对于32 位校验和需要long
;输出的高 32 位几乎肯定是 0。
【讨论】:
【参考方案2】:因为如果它返回一个 int,一半的 CRC 将是负数。期望是 32 位 CRC 是无符号的,即 0..4294967295,不能用 int 表示。
【讨论】:
马克,谢谢你的回答。我有一个后续行动:我正在读取和写入最后一个字节是所有前面字节的 CRC 的文件。 CRC 必须适合 4 个字节。所以我不能只忽略长 CRC 的前 4 个字节,可以吗?我需要先将 long 转换为“无符号”表示,对吗? 根据定义,32 位 CRC 适合 long 的低四个字节。 Java 中没有无符号的 32 位类型。 Java 语言不支持无符号整数类型这一事实与此无关。有符号或无符号的任何 32 位值都可以存储在 32 位大小的 Java int 中。 @bughouse26 然而,这就是原因。以上是关于为啥 java.util.zip.CRC32.getValue() 返回一个 long 而不是 int?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 glTranslatef?为啥不直接更改渲染坐标?
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?