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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中将十六进制转换为十进制相关的知识,希望对你有一定的参考价值。

我发现在.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'参数”

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

答案

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

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

有一种简单而通用的方法可以使用“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"
另一答案

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

> strtoi('0x7f8cff8b')
[1] 2139946891
> strtoi('0x8f8cff8b')
[1] NA
另一答案

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

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

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

as.numeric(V)
#[1]       41843       71110       95923 10149429248

以上是关于在R中将十六进制转换为十进制的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在R中将时间(mm:ss)转换为十进制形式

在R中将字符串转换为二进制向量

在android中将图像转换为二进制图像

在Postgres中将十六进制字符串转换为bigint [重复]

在 Python 中将十六进制颜色代码转换为颜色名称