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

时间:2013-10-21 18:32:47

标签: r hex decimal

我发现.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))):无效的'时间'参数“

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

5 个答案:

答案 0 :(得分:29)

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

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

答案 1 :(得分:10)

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

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"

答案 2 :(得分:5)

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

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

答案 3 :(得分:3)

@user4221472's answer中所述,strtoi()溢出时,整数大于2 ^ 31。

解决这个问题的最简单方法是使用as.numeric()

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

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

答案 4 :(得分:0)

要获取16位有符号值:

  temp <- strtoi(value, base=16L)
  if (temp>32767){ temp <- -(65535 - temp) }

一般形式:

  max_unsigned <- 65535 #0xFFFF
  max_signed <- 32767 #0x7FFF
  temp <- strtoi(value, base=16L)
  if (temp>max_signed){ temp <- -(max_unsigned- temp) }