创建十六进制字符的十进制值

时间:2020-02-18 13:02:41

标签: r

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

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(可能是因为其中包含字母)。

2 个答案:

答案 0 :(得分:3)

有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))

答案 1 :(得分:2)

来自?strtoi

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

参数

x 一个字符向量,或由as.charer强制使用的向量。

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

1。创建可复制的最小示例

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

2。使用strtoi base参数的解决方案:

strtoi(appel, base=16)

返回:

[1]  1409800 14211977