Convert hex to decimal in R

半世苍凉 提交于 2019-12-03 22:14:55
Simon O'Hanlon

Use base::strtoi to convert hexadecimal character vectors to integer:

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

There is a simple and generic way to convert hex <-> other formats using "C/C++ way":

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"
user4221472

strtoi() has a limitation of 31 bits. Hex numbers with the high order bit set return NA:

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

As mentioned in @user4221472's answer, strtoi() overflows with integers larger than 2^31.

The simplest way around that is to use as.numeric().

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

as.numeric(V)
#[1]       41843       71110       95923 10149429248
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!