java - android 中错误的 CRC32 散列

标签 java android hash crc32

我正在使用以下代码计算 CRC32 哈希。

CRC32 crc = new CRC32();
crc.update(str.getBytes());
String enc = Long.toHexString(crc.getValue()); 

我的问题是,在输出 (enc) 中,如果第一个字符是“0”,它会删除那个零,最后我将得到一个 7 个字符长的十六进制字符串。谁能告诉我,如果“0”作为第一个字符,我如何才能获得完整的 8 个字符长的十六进制字符串?

最佳答案

根据 toHexString 的 Java 文档这是预期的行为:

This value is converted to a string of ASCII digits in hexadecimal (base 16) with no extra leading 0s.

有很多方法可以解决这个问题,例如在字符串的开头添加一个前导零字符,直到达到所需的长度,尽管另一种方法是使用 String.format 允许使用 C 风格格式规范的方法:

String enc = String.format("%08X", crc.getValue());

这是常规 Java 的完整工作示例,其中包括带前导零的计算:

import java.util.zip.CRC32;
import java.util.zip.Checksum;

public class HelloWorld{
     public static void main(String []args){
        String str = "c";
        CRC32 crc = new CRC32();
        crc.update(str.getBytes());
        String enc = String.format("%08X", crc.getValue());
        System.out.println(enc);
     }
}

关于java - android 中错误的 CRC32 散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993557/

相关文章:

java - 二维数组的快速散列

python - 如何在 python 中生成与操作系统无关的文件哈希?

c++ - 使 std 的数据结构默认使用我现有的非静态哈希函数 "hashCode()"

arrays - 哈希值数组

Java绘图程序

java - 与 java 应用程序的 ODBC 连接

java - 我怎么知道哪些类已经被编译了

android - 更改默认的 android 操作栏图标

java - OpenGL ES 2.0 - 多个 View 如何使用相同的渲染器?

java - Realm 对象上的 RealmProxy 错误