我从提供使用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
,但我不清楚如何最好地使用该函数计算文件的校验和。
答案 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
此编辑版本明确打开和关闭连接以停止警告。