fBasics
パッケージに_.hex.to.dec
_という関数があることがわかりました。
.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
は、16進数の文字ベクトルを整数に変換します。
strtoi(c("0xff", "077", "123"))
#[1] 255 63 123
「C/C++の方法」を使用して16進<->その他の形式に変換する簡単で一般的な方法があります。
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ビットの制限があります。上位ビットが設定された16進数はNA
を返します。
> strtoi('0x7f8cff8b')
[1] 2139946891
> strtoi('0x8f8cff8b')
[1] NA
@ user4221472の回答 で述べたように、strtoi()
は2 ^ 31より大きい整数でオーバーフローします。
これを回避する最も簡単な方法は、as.numeric()
を使用することです。
V <- c(0xa373, 0x115c6, 0x176b3, 0x25cf40000)
as.numeric(V)
#[1] 41843 71110 95923 10149429248