Engee 文档
Notebook

计算Julia中的CRC-32校验和

简要资料

在这个例子中,我们使用Julia编程语言和Libz库从字符串计算CRC-32校验和。

导言

什么是CRC-32?

CRC-32*(循环冗余校验,32位)是用于验证数据完整性的校验和计算算法。 它在传输或存储数据时使用,以确保数据没有被损坏。 该算法生成特定字节序列所特有的32位数字(哈希)。
CRC-32广泛应用于网络协议、归档器(例如ZIP)、数据存储系统和许多其他需要快速信息完整性验证的应用中。
在这个例子中,我们将CRC-32算法应用于字符串"the quick brown fox jumps over the lazy dog",将其转换为字节序列并计算校验和。

主要部分

安装所需的Libz软件包(如果尚未安装)

In [ ]:
import Pkg; Pkg.add("Libz")

我们连接Libz库,其中包含CRC-32实现。

In [ ]:
using Libz

创建字符串"the quick brown fox jumps over the lazy dog"并将其转换为字节数组。 UInt8

In [ ]:
data = UInt8.(b"The quick brown fox jumps over the lazy dog")
Out[0]:
43-element Vector{UInt8}:
 0x54
 0x68
 0x65
 0x20
 0x71
 0x75
 0x69
 0x63
 0x6b
 0x20
 0x62
 0x72
 0x6f
    ⋮
 0x74
 0x68
 0x65
 0x20
 0x6c
 0x61
 0x7a
 0x79
 0x20
 0x64
 0x6f
 0x67

从字节数组计算CRC-32哈希:Libz.crc32函数接受一个字节数组并返回一个32位整数

In [ ]:
crc_value = Libz.crc32(data)
Out[0]:
0x414fa339

将结果转换为不带前缀的十六进制字符串 0x 我们输出结果

In [ ]:
hex_string = string(crc_value, base=16)
println(hex_string)
414fa339

最终结果

对于字符串"the quick brown fox jumps over the lazy dog",我们得到十六进制形式的CRC-32值: 414fa339.

此值可能因使用的CRC-32标准而异(例如,IEEE802.3、reversed等)。). 在这种情况下,使用与广泛版本兼容的实现。

结论

我们研究了如何使用Julia语言和Libz库,轻松快速地计算任何字节序列的CRC-32校验和值。 这样的计算对于在传输或存储期间验证数据的完整性是有用的。 在上面的例子中,字符串被转换为字节,之后CRC-32算法被应用到它,结果以方便的十六进制格式输出。

该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/CRC-32