如何在R中计算md5的模数?

时间:2015-08-02 00:55:27

标签: r md5 modulo

标题说明了一切......

我知道我可以使用digest::digest来计算字符串的md5

digest::digest('string', algo = "md5", serialize = FALSE)

但是,我无法将这个(大概是十六进制)值转换为整数(或大整数)以用于模数目的...

我尝试使用as.hexmodestrtoi都失败了。

> as.hexmode(digest("1", algo = "md5", serialize = FALSE))
Error in as.hexmode(digest("1", algo = "md5", serialize = FALSE)) :
'x' cannot be coerced to class "hexmode"

> strtoi(digest("1", algo = "md5", serialize = FALSE), base = 16L)
[1] NA

1 个答案:

答案 0 :(得分:3)

问题是结果数字太高而无法表示为整数,strtoi返回NA。由于模数只需要较小的数字,为什么不直接转换md5-string的结尾?此示例与使用Rmpfr的下一个(正确)解决方案的结果不同。

x <- digest::digest('string', algo = "md5", serialize = FALSE)
strtoi(substr(x, nchar(x)-4, nchar(x)), base=16)

另一个解决方案是使用Rmpfr库,它支持大整数的转换。这样可以得到正确的转换结果(但需要额外的包):

library(Rmpfr)
x <- digest::digest('string', algo = "md5", serialize = FALSE)
x <- mpfr(x, base=16)
x %% 1000