在android中错误的CRC32哈希

时间:2014-01-08 10:55:51

标签: java android hash crc32

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

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

我的问题是,在输出(enc)中,如果第一个字符为'0',则删除该零,最后我将得到一个7个字符长的十六进制字符串。任何人都可以告诉我,如果第一个字符为'0',我怎样才能获得完整的8个字符的长十六进制字符串?

2 个答案:

答案 0 :(得分:2)

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

  

此值转换为十六进制(基数为16)的ASCII数字字符串,没有额外的前导0。

有很多方法可以解决这个问题,例如在字符串的开头添加一个前导零字符,直到达到所需的长度,但另一种方法是使用允许的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);
     }
}

答案 1 :(得分:0)

嗨,请看看这里 它适合我,请尝试。

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

public class CalculateCRC32ChecksumForByteArray {

    public static void main(String[] args) {

        String input = "Java Code Geeks - Java Examples";

        // get bytes from string
        byte bytes[] = input.getBytes();

        Checksum checksum = new CRC32();

        // update the current checksum with the specified array of bytes
        checksum.update(bytes, 0, bytes.length);

        // get the current checksum value
        long checksumValue = checksum.getValue();

        System.out.println("CRC32 checksum for input string is: " + checksumValue);

    }

}