微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 和 swift 中不同的 CRC32 值

如何解决Java 和 swift 中不同的 CRC32 值

我正在用 Swift 编写一个实用程序,可用于计算输入数据的 CRC32 校验和。我们广泛使用的 Java 中也存在类似的实用程序,并且一直对我们运行良好。

Java 实用程序使用 java.util.zip.CRC32 来计算校验和。伪代码如下:

Java 代码

private void transferFileData(short index,byte[] data,long dataSize) {  
    CRC32 crc32 = new CRC32();
        
    long crc = crc32.update(data,(int) dataSize);
     System.out.println("CRC32 : " + crc);
}
   

Swift 使用 CRC32 (import CryptoSwift) CryptoSwift 代码在 swift 中生成校验和如下:

Swift 代码

func crc32Func(_ item:[Int8] ) {
        let data = Data(bytes: item,count: item.count)
        let byte = data.bytes
        let crc32 = byte.crc32()
        print("checksum == \(crc32)"
}

Java 代码输出是:

Checksum in Java : 3771181957

swift 代码输出是:

Checksum in swift : 1894162356

为什么校验和值不一样?

这是Swift应用的代码如下:

数据类型为[Int8]

数据大小为 450 bytes

让项目:

[Int8] = [45,35,76,70,67,68,95,79,84,65,87,85,10,80,75,71,86,69,82,83,73,78,58,51,46,48,66,72,97,57,98,99,52,56,53,49,50,55,54,101,90,26,5,32,-79,11,8,-39,-5,4,-35,-15,-13,-11,-31,-9,-127,-14,-27,1,12,-7,9,-4,25,89,105,41,121,-119,-103,-4]

是输入。

Java 输入:

byte[] 数据

类型为long,输入的数据与swift数据的[Int8]相同。

解决方法

您从 Swift 代码(无论实际代码是什么)获得的 CRC 是正确的。您从 Java 代码(无论那个实际代码是什么)获得的 CRC 不正确。

如果不至少看到该代码,就无法知道您在 Java 代码中做错了什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。