在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中将十六进制转换为十进制的主要内容,如果未能解决你的问题,请参考以下文章