【问题标题】: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?

【问题讨论】:

    标签: long-integer crc32


    【解决方案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 然而,这就是原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多