Java android中错误的CRC32哈希
我正在使用下面的代码计算CRC32哈希Java android中错误的CRC32哈希,java,android,hash,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个字符长的十六进制字符串吗?嗨,请看这里 它对我有用,请试试 import java.u
CRC32 crc = new CRC32();
crc.update(str.getBytes());
String enc = Long.toHexString(crc.getValue());
我的问题是,在输出(enc)中,如果第一个字符是“0”,它将删除该零,最后我将得到一个7个字符长的十六进制字符串。有人能告诉我,如果第一个字符是“0”,如何获得完整的8个字符长的十六进制字符串吗?嗨,请看这里
它对我有用,请试试
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);
}
}
根据Java文档的预期行为: 此值将转换为十六进制(以16为基数)的ASCII数字字符串,无额外的前导0 有多种方法可供选择,例如在字符串开头添加一个前导零字符,直到达到所需的长度,但另一种方法是使用允许使用C样式格式规范的
string.format
方法:
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);
}
}
我的问题是,当使用方法toHexString()将checkSumValue转换为十六进制字符串时。。。它给了我7个字符长的十六进制字符串。当我在在线crc32生成器上检查它时,它给了我一个8个字符长的十六进制字符串,以“0(零)”开头'其余的7个字符是相同的…因此,在转换checkSumValue时,“0”被截断,这将导致一个7个字符的十六进制字符串…我该如何解决这个问题?您好,我有点困惑,但请查看一下,希望它能帮助您您根本没有得到“错误的CRC”。你只是少了一个前导零。该值是正确的。前导零不会改变值。感谢您的回答…我也使用相同的概念检查字符串长度并添加“0”,直到达到所需的长度。。。