R で 32進数を 10進数に変換する必要があったので書きました。
R
base2dec <- function(str, base = 32) {
chars_list <- strsplit(str, split = "")
sapply(chars_list, function(chars) {
n <- length(chars)
digits <- sapply(seq_len(n), function(i) {
char <- tolower(chars[i])
tryCatch(as.integer(char), warning = function(e) {
which(letters == char) + 9
})
})
sum(digits * base^(n-seq_len(n)))
})
}
こんな感じで使います。
> base2dec("100", base = 10)
[1] 100
> base2dec("ff", base = 16)
[1] 255
> base2dec("11", base = 32)
[1] 33
ちなみに、8進数と 16進数に対しては、as.octmode()
と as.hexmode()
という関数がそれぞれ用意されていて、次のようにして変換できます。
> as.integer(as.octmode("10"))
[1] 8
> as.integer(as.hexmode("ff"))
[1] 255
Enjoy!
追記
ていうか、as.hexmode()
の中身を覗いてみると、strtoi()
という関数があることに気づきました。
> strtoi("10", base = 8)
[1] 8
> strtoi("ff", base = 16)
[1] 255
> strtoi("11", base = 32)
[1] 33
これでええやん。。orz