如何计算 R 中 md5 的模数?

How to compute modulo of md5 in R?

标题说明了一切...

我知道我可以使用 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

问题是结果数太大,无法用整数表示,strtoi returns NA。由于您只需要较小的数字作为模数,为什么不只转换 md5 字符串的末尾呢?此示例未给出与下一个(正确的)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