我想要做的是在R中实现一个哈希技巧。
以下代码:
library(digest)
a<-digest("key_a", algo='xxhash32')
#[1] "4da5b0f8"
这返回了字符类型的哈希码。有什么办法可以把它变成整数吗? 或者还有其他任何方法可以实现这个目标吗?
答案 0 :(得分:8)
该输出是十六进制(基数为16)的字符串。使用以下函数将其更改为十进制。取自另一个论坛帖子但链接不再有效(2017)。
hex_to_int = function(h) {
xx = strsplit(tolower(h), "")[[1L]]
pos = match(xx, c(0L:9L, letters[1L:6L]))
sum((pos - 1L) * 16^(rev(seq_along(xx) - 1)))
}
输出
> hex_to_int(a)
[1] 1302704376
但更好的答案是 strtoi :正如@Andrie所说,@ Gedrox回答, base::strtoi 功能以同样的方式运作。
strtoi("4da5b0f8", 16)
[1] 1302704376
答案 1 :(得分:4)
内置函数base::strtoi
:
> strtoi("4da5b0f8", 16)
[1] 1302704376
答案 2 :(得分:2)
自版本0.6.19起,digest
具有digest2int
函数,尽管没有选择算法。使用的算法是詹金的one_at_a_time。
digest::digest2int("key_a")
#> [1] 1414969953