如何使用Linux`cksum`命令计算R兼容输出的CRC校验和

时间:2014-02-04 17:03:25

标签: r crc digest

我从提供使用Linux cksum命令计算的校验和(小数)的站点下载文件。

在R中,我可以用十进制格式执行CRC-32校验和:

library(digest)
strtoi(digest(file_path, algo="crc32", file=TRUE), base=16L)

我是否可以使用类似的命令来获取与Linux cksum命令兼容的文件的校验和?我需要一种跨平台的方法,最好不需要R外部的软件。wikipedia page on cksum表示:

“标准的cksum命令,在大多数类UNIX操作系统(包括GNU / Linux,* BSD,Mac OS X和Solaris)上都可以使用基于以太网标准帧检查的CRC算法,因此可以在实现之间互操作但它不能与CRC-32计算兼容。“

我还在cksum包中找到了bitops,但我不清楚如何最好地使用该函数计算文件的校验和。

1 个答案:

答案 0 :(得分:2)

获取文件大小,读入原始向量,转换为char,使用bitops'cksum:

cksumfile = function(f){
   size = file.info(f)$size
   c = file(f,"rb")
   csum = cksum(rawToChar(readBin(c,raw(),n=size)))
   close(c)
   csum
}

试验:

> cksumfile("/etc/passwd")
[1] 1594741334
> system("cksum /etc/passwd")
1594741334 1953 /etc/passwd

此编辑版本明确打开和关闭连接以停止警告。