在R中将十六进制转换为十进制

问题描述 投票:23回答:4

我发现在.hex.to.dec包中有一个名为fBasics的函数。

当我做.hex.to.dec(a)时,它有效。

我有一个数据框,其中包含由以下值组成的列samp_column

a373, 115c6, a373, 115c6, 176b3

当我做.hex.to.dec(samp_column)时,我收到此错误:

“nchar(b)中的错误:'nchar()'需要一个字符向量”

当我做.hex.to.dec(as.character(samp_column))时,我收到此错误:

“rep中的错误(base.out,1 + ceiling(log(max(number),base = base.out))):无效的'times'参数”

这样做的最佳方式是什么?

r hex decimal
4个回答
29
投票

使用base::strtoi将十六进制字符向量转换为整数:

strtoi(c("0xff", "077", "123"))
#[1] 255  63 123

10
投票

有一种简单而通用的方法可以使用“C / C ++方式”转换hex < - >其他格式:

V <- c(0xa373, 0x115c6, 0xa373, 0x115c6, 0x176b3)

sprintf("%d", V)
#[1] "41843" "71110" "41843" "71110" "95923"

sprintf("%.2f", V)
#[1] "41843.00" "71110.00" "41843.00" "71110.00" "95923.00"

sprintf("%x", V)
#[1] "a373"  "115c6" "a373"  "115c6" "176b3"

5
投票

strtoi()有31位的限制。高位设置的十六进制数字返回NA

> strtoi('0x7f8cff8b')
[1] 2139946891
> strtoi('0x8f8cff8b')
[1] NA

3
投票

正如在@user4221472's answer中提到的那样,strtoi()溢出的整数大于2 ^ 31。

最简单的方法是使用as.numeric()

V <- c(0xa373, 0x115c6, 0x176b3, 0x25cf40000)

as.numeric(V)
#[1]       41843       71110       95923 10149429248
© www.soinside.com 2019 - 2024. All rights reserved.