你可以使用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(十六進制,即十進制爲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);
更新:您還可以使用基本的62,而不是36就壓縮更多的,但是請注意,JS支持高達基底36,所以你需要實現那personal notation手動(我相信已經有一些實現了)。
如何從字符串轉換爲base36,需要它試圖在那裏的全名是可以學到一些東西reddit的的API t2_36basesencodedHere http://www.reddit.com/dev/API#fullnames – 2015-02-14 04:37:42