strtoi无法将字符串转换为整数,返回NA

oka*_*tee 6 r

从字符串到整数的32位二进制字符串转换失败.见下文

strtoi("10101101100110001110011001111111", base=2)
# [1] NA
Run Code Online (Sandbox Code Playgroud)

任何想法可能是什么问题?

flo*_*del 10

看起来strtoi无法处理大于的数字2^31:

strtoi("1111111111111111111111111111111", base=2L)
# [1] 2147483647
strtoi("10000000000000000000000000000000", base=2L)
# [1] NA
Run Code Online (Sandbox Code Playgroud)

这是我的机器(可能是你的机器)可以处理整数的最大整数:

.Machine$integer.max
# [1] 2147483647
Run Code Online (Sandbox Code Playgroud)

请注意,文档确实警告溢出(来自?strtoi):

无法解释为整数或溢出的值将返回为NA_integer_.

你可以做的是编写自己的函数,将输出作为数字而不是整数返回:

convert <- function(x) {
    y <- as.numeric(strsplit(x, "")[[1]])
    sum(y * 2^rev((seq_along(y)-1)))
}

convert("1111111111111111111111111111111")
# [1] 2147483647
convert("10000000000000000000000000000000")
# [1] 2147483648
Run Code Online (Sandbox Code Playgroud)