【问题标题】:strtoi fails to convert string to integer, returns NAstrtoi 无法将字符串转换为整数,返回 NA
【发布时间】:2012-11-12 06:37:31
【问题描述】:

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

strtoi("10101101100110001110011001111111", base=2)
# [1] NA

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

【问题讨论】:

    标签: r


    【解决方案1】:

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

    strtoi("1111111111111111111111111111111", base=2L)
    # [1] 2147483647
    strtoi("10000000000000000000000000000000", base=2L)
    # [1] NA
    

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

    .Machine$integer.max
    # [1] 2147483647
    

    请注意,文档确实警告溢出(来自?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
    

    【讨论】:

      猜你喜欢
      • 2013-03-10
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多