我正在使用以下代码计算CRC32哈希值。
CRC32 crc = new CRC32();
crc.update(str.getBytes());
String enc = Long.toHexString(crc.getValue());
我的问题是,在输出(enc)中,如果第一个字符为'0',则删除该零,最后我将得到一个7个字符长的十六进制字符串。任何人都可以告诉我,如果第一个字符为'0',我怎样才能获得完整的8个字符的长十六进制字符串?
答案 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);
}
}