toStringメソッドとparseIntメソッドを使用できます。これらは、基本的に、リンクで説明したメソッドと同じことを実行します。
var hexString = "4b3fc1400";
var b36 = parseInt(hexString, 16).toString(36); // "9a29mgw"
そしてそれを元に戻すには、反対のことをする必要があります:
hexString = parseInt(b36, 36).toString(16); // "4b3fc1400"
文字列の唯一の問題は、JavaScriptの数値としては大きすぎて脅威にならないことです。それらをチャンクに分割する必要があります。JavaScriptの数値は2^53(プラス記号)まで正確であるため、処理できる正の最大数値は0x20000000000000(16進数、つまり10進数で9007199254740992)です。精度を使用してチャンクを処理できます。
var hexString = "37c1fbcabbc31f2f8d2ad31ceb91cd8d0d189ca5963dc6d353188d3d5e75b8b3e401d4e74e9b3e02efbff0792cda5c4620cb3b1f84aeb47b8d2225cd40e761a5"
var b36 = "", b16 = "";
var chunk, intChunk;
// 14 is the length of 0x20000000000000 (2^53 in base 16)
for (var i = 0, max = 14; i < hexString.length; i += max) {
chunk = hexString.substr(i, max);
intChunk = parseInt(chunk, 16);
if (intChunk.toString(16) !== chunk) {
intChunk = parseInt(hexString.substr(i, max - 1), 16);
i -= 1;
}
b36 += intChunk.toString(36)
}
// 11 is the length of 2gosa7pa2gv (2^53 in base 36)
for (var i = 0, max = 11; i < b36.length; i += max ) {
chunk = b36.substr(i, max);
intChunk = parseInt(chunk, 36);
if (intChunk.toString(36) !== chunk) {
intChunk = parseInt(b36.substr(i, max - 1), 36);
i -= 1;
}
b16 += intChunk.toString(16)
}
console.log(hexString);
console.log(b36);
console.log(b16);
更新: 36の代わりにベース62を使用してさらに圧縮することもできますが、JSはベース36までサポートしているため、その個人表記を手動で実装する必要があります(すでにいくつかの実装があると思います)。