我发现.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))):无效的'时间'参数“
这样做的最佳方式是什么?
答案 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) }