如何解决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)"
}
Checksum in Java : 3771181957
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 举报,一经查实,本站将立刻删除。