【问题标题】:Create decimal values of character hex创建字符十六进制的十进制值
【发布时间】:2020-07-25 19:02:16
【问题描述】:

使用以下代码,我正在读取一个文本文件并在屏幕上显示一列。

externalData <- read.delim("testdata.txt", header = FALSE, sep = "@")

i = 1;
while(i < 11) {
  appel <- as.character(externalData[i,3,1])
  i = i + 1;
  print(appel)
}

输出如下:

我正在尝试将这些值从十六进制转换为十进制。

我尝试了以下方法:

strtoi(c(appel))

但这似乎不起作用,这只会删除第一个和最后一个的引号,并将中间的所有内容设置为 N/A(可能是因为其中有字母)。

【问题讨论】:

标签: r


【解决方案1】:

这里有 3 种方法可以将十六进制(字符)转换为十进制(数字)。

x <- c("158308", "bb1787", "853f91")

# 1.
strtoi(x, base = 16L)

# 2.
as.integer(as.hexmode(x))

# 3.
as.integer(paste0("0x", x))
# more general edition:
# as.integer(ifelse(!grepl("^0x", x), paste0("0x", x), x))

【讨论】:

    【解决方案2】:

    来自?strtoi

    使用 C 函数 strtol 根据给定的基数将字符串转换为整数,或按照 C 规则选择合适的基数。

    参数

    x 一个字符向量,或者由 as.character 强制转换的东西。

    base 一个介于 2 到 36 之间的整数,或零(默认)。

    1.创建一个可重现的最小示例

    appel <- c("158308", "d8db89")
    

    2.使用strtoibase参数的解决方案:

    strtoi(appel, base=16)
    

    返回:

    [1]  1409800 14211977
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 2018-01-22
      • 2019-07-27
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      相关资源
      最近更新 更多