你可以使用
toString和
parseInt方法,这两个方法基本上与你在链接中提到的方法是相同的。
var hexString = "4b3fc1400"
var b36 = parseInt(hexString, 16).toString(36)
要将其转换回来,您只需要做相反的操作:
hexString = parseInt(b36, 36).toString(16)
你的字符串唯一的问题在于它太大了,在JavaScript中无法当作数字处理。你应该将它们分成块。JavaScript的数字精确度最高可达2^53(加号),所以你可以处理的最大正数是0x20000000000000(十六进制表示,即9007199254740992的十进制表示);你可以利用这种精度来处理块:
var hexString = "37c1fbcabbc31f2f8d2ad31ceb91cd8d0d189ca5963dc6d353188d3d5e75b8b3e401d4e74e9b3e02efbff0792cda5c4620cb3b1f84aeb47b8d2225cd40e761a5"
var b36 = "", b16 = "";
var chunk, intChunk;
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)
}
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进制,因此你需要手动实现
个人注释(我相信已经有一些实现了)。