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)))
})
}
```
こんな感じで使います。
```r
> base2dec("100", base = 10)
[1] 100
> base2dec("ff", base = 16)
[1] 255
> base2dec("11", base = 32)
[1] 33
```
ちなみに、8進数と 16進数に対しては、`as.octmode()` と `as.hexmode()` という関数がそれぞれ用意されていて、次のようにして変換できます。
```r
> as.integer(as.octmode("10"))
[1] 8
> as.integer(as.hexmode("ff"))
[1] 255
```
Enjoy!
## 追記
ていうか、`as.hexmode()` の中身を覗いてみると、`strtoi()` という関数があることに気づきました。
```r
> strtoi("10", base = 8)
[1] 8
> strtoi("ff", base = 16)
[1] 255
> strtoi("11", base = 32)
[1] 33
```
これでええやん。。orz