8

strtoi(x,base=36)base36 でエンコードされた文字列を整数に変換します。

strtoi("zzzz",base=36)
[1] 1679615

この操作を逆にする関数はありますか?つまり、正の整数を指定すると、base36 と同等の結果が得られますか? 基本的に、私はitostr()そのような機能を探しています

itostr(1679615,base=36)
[1] "zzzz"

(36 以外の基数は必要ありませんが、base引数があると便利です。)

4

3 に答える 3

5

実装については知りませんが、アルゴリズムはそれほど難しくありません。これは、32 ビットの符号付き整数で動作するものです。

intToBase36 <- function(int) {
  stopifnot(is.integer(int) || int < 0)

  base36 <- c(as.character(0:9),LETTERS)
  result <- character(6)
  i <- 1L
  while (int > 0) {
    result[i] <- base36[int %% 36L + 1L]
    i <- i + 1L
    int <- int %/% 36L
  }
  return(paste(result, sep="", collapse=""))
}

より大きな整数をサポートする必要がある場合は、 bit64およびRmpfrパッケージを使用できます。

于 2016-03-16T13:39:10.877 に答える