strtoi(x,base=36)
が整数にbase36エンコードされた文字列を変換するbase36に変換:整数
strtoi("zzzz",base=36)
[1] 1679615
この操作、すなわち、正の整数で指定されたbase36と同等の収率を反転させる機能がありますか?基本的に、私はしないよう
itostr(1679615,base=36)
[1] "zzzz"
(私は36以外の任意の塩基を必要としませんが、base
引数は持っていいだろう。)
strtoi(x,base=36)
が整数にbase36エンコードされた文字列を変換するbase36に変換:整数
strtoi("zzzz",base=36)
[1] 1679615
この操作、すなわち、正の整数で指定されたbase36と同等の収率を反転させる機能がありますか?基本的に、私はしないよう
itostr(1679615,base=36)
[1] "zzzz"
(私は36以外の任意の塩基を必要としませんが、base
引数は持っていいだろう。)
パッケージBBmiscをインストールすると、itostr機能が使用可能になります。
library(BBmisc)
itostr(1679615,base=36)
[1] "zzzz"
ことitostr()
機能を探していますアルゴリズムの実装はそれほど難しくありません。ここには、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=""))
}
ニース。私は、 'intToBase36(1679615)'を壊してしまったのですが、 'is.integer(1679615)'が 'FALSE'で、' intToBase36(1679615L) 'を使って少し強制してトリックします。 –
迅速Rcppはof thisをハックだけでなく、あなたにそれを取得します:
library(inline)
cxxfunction(signature(x="numeric"), body='
unsigned int val = as<unsigned int>(x);
static char const base36[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string result;
result.reserve(14);
do {
result = base36[val % 36] + result;
} while (val /= 36);
return wrap(result);
', plugin="Rcpp") -> base36enc
base36enc(36)
## [1] "10"
base36enc(72)
## [1] "20"
base36enc(73)
## [1] "21"
それは間違いなくしかし、本番用のビットより多くのコードを必要とします。
もう1つの回答で参照されているパッケージはC-backedなので、これはおそらく良い選択です。
#ty Joshua。何が起こったのか分かりません(そして私はそれをキャッチしたはずです) – hrbrmstr
これは面白そうですが、正直言って、私にとってはRcpp以外のユーザーではないと威張っています。私はドイツ語のデフォルトのロケールに関連するかもしれない暗号エラーを受け取ります: "include/Rcpp/Date.h:103(私はRcppユーザーになるべきだと私は仮定しています。 :エラー:フィールド "タイプが不完全です"。 –
https://github.com/statsmaths/baseN –
重複はしませんが、同様の質問についてはこちら[こちら](http://stackoverflow.com/questions/23123314/converting-ascii-number-to) -strings-in-r) – RHertel