在上周工作中,碰到了一个关于CRC32校验的问题。如果不明白CRC校验是什么的童鞋可以上网搜搜。
客户让我解析一个二进制文件,它给我的文件是在实机中(linux)下导出的文件,而我们开发是在windows下开发的,大体给大家介绍下这个文件的的结构

简单的就是这样,其实乱七八糟的有上百个片段内容,现在我们要分析的就是头信息中的CRC值和文件内容中part0,part1......一直到partN计算得出的CRC的值进行比较。据客户说,他们从实机导出的数据,计算CRC32值是通过调用zlib中libz.so库的crc32()函数得到的。我想,现在java中有java.util.zip.CRC32类,直接处理就行了,应该满简单的。于是简单构想了下,如何更好的解析文件,在以后文件做出改动或者扩展的时候能够方便维护。想好了之后开工了。
当C头信息的CRC的值解析出来的时候,和文件内容计算出来的CRC的值,怎么也不一样,我就奇怪了,简单的看了下CRC32类的源码,
package java.util.zip;
/**
* A class that can be used to compute the CRC-32 of a data stream.
*
* @see Checksum
* @version 1.32, 11/17/05
* @author David Connelly
*/
public
class CRC32 implements Checksum {
private int crc;
/**
* Creates a new CRC32 object.
*/
public CRC32() {
}
/**
* Updates CRC-32 with specified byte.
*/
public void update(int b) {
crc = update(crc, b);
}
/**
* Updates CRC-32 with specified array of bytes.
*/
public void update(byte[] b, int off, int len) {
if (b == null) {
throw new NullPointerException();
}
if (off < 0 |

在处理一个从Linux导出的二进制文件时,遇到了CRC32校验问题。由于Java的CRC32类计算结果与Linux的libz.so库不同,作者决定手动实现CRC32算法。经过研究,作者提供了CRC32算法的关键代码,包括CRC32表和计算方法,并成功通过测试。
最低0.47元/天 解锁文章
1495

被折叠的 条评论
为什么被折叠?



