如何计算 R 中 md5 的模数?
How to compute modulo of md5 in R?
标题说明了一切...
我知道我可以使用 digest::digest
来计算字符串的 md5
:
digest::digest('string', algo = "md5", serialize = FALSE)
但是,我不知道如何将这个(可能是十六进制)值转换为整数(或大整数)以用于模数目的...
我尝试使用 as.hexmode
和 strtoi
都失败了。
> 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
标题说明了一切...
我知道我可以使用 digest::digest
来计算字符串的 md5
:
digest::digest('string', algo = "md5", serialize = FALSE)
但是,我不知道如何将这个(可能是十六进制)值转换为整数(或大整数)以用于模数目的...
我尝试使用 as.hexmode
和 strtoi
都失败了。
> 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