Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中错误的CRC32哈希_Java_Android_Hash_Crc32 - Fatal编程技术网

Java android中错误的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哈希

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”,直到达到所需的长度。。。