我想在R中实现哈希技巧。
以下是代码:
以下是代码:
library(digest)
a<-digest("key_a", algo='xxhash32')
#[1] "4da5b0f8"
这返回的是字符类型的哈希码。有没有办法将它转换为整数?或者有其他包可以实现这个功能吗?
library(digest)
a<-digest("key_a", algo='xxhash32')
#[1] "4da5b0f8"
这返回的是字符类型的哈希码。有没有办法将它转换为整数?或者有其他包可以实现这个功能吗?
这个输出是一个十六进制字符串。使用下面的函数将其转换为十进制。该函数来自另一个论坛帖子,但链接已经失效(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
digest
新增了一个digest2int
函数,尽管没有算法选择。所使用的算法是Jenkin's one_at_a_time。digest::digest2int("key_a")
#> [1] 1414969953
有一个内置的函数base::strtoi
:
> strtoi("4da5b0f8", 16)
[1] 1302704376
strtoi
,正如其他答案所建议的那样。 - Andriestringr::str_sub(a, end=-2)
会移除a
的最后一个字符,以确保其适合于32位整数。 - Simon Woodward