如何将十六进制数压缩成短字符串
How to compress an hexadecimal number into a short string?
我有一个未知长度的十六进制数,我想把它转换成一个尽可能短的字符串。然后能够将新字符串转换回原始数字。
由于每个数字只有4位,我正在考虑将数字转换为UFT-16或UFT-32字符串。这将创建一个带有奇怪字符的短字符串。
假设示例:0x874FAB41900C -> "ÚΔЂ" -> 0x874FAB41900C.
所以我要找的是两个Javascript函数,像这样:function hexToString(hex) {
for (var i=0; i < hex.length; i++) {
// convert the digits into UFT-16
}
return string;
}
function stringToHex(string) {
for (var i=0; i < string.length; i++) {
// convert the char back into hex values
}
return hex;
}
你知道怎么做吗?
js字符串字符使用16位,因此我们可以在1中打包4个十六进制字符:
function hexToString(hex) {
hex = hex.substring(2) // remove the '0x' part
var string = ""
while (hex.length % 4 != 0) { // we need it to be multiple of 4
hex = "0" + hex;
}
for (var i = 0; i < hex.length; i+= 4){
string += String.fromCharCode(parseInt(hex.substring(i,i + 4), 16)) // get char from ascii code which goes from 0 to 65536
}
return string;
}
function stringToHex(string) {
var hex = ""
for (var i=0; i < string.length; i++) {
hex += ( (i == 0 ? "" : "000") + string.charCodeAt(i).toString(16)).slice(-4) // get character ascii code and convert to hexa string, adding necessary 0s
}
return '0x' + hex.toUpperCase();
}
var str = hexToString("0x874FAB41900C")
console.log(str)
console.log(stringToHex(str))
如果你想要一个32位的版本,你需要改变编码版本,解码保持不变。请注意,只有最多21位的unicode字符,所以不要认为你可以做得比16位更好,这个不能用更少的字符:
function hexToString(hex) {
hex = hex.substring(2) // remove the '0x' part
var string = ""
while (hex.length % 8 != 0) { // we need it to be multiple of 8
hex = "0" + hex;
}
for (var i = 0; i < hex.length; i+= 8){
string += String.fromCharCode(parseInt(hex.substring(i,i + 4), 16), parseInt(hex.substring(i + 4,i + 8), 16))
}
return string;
}
你可以在这里阅读更多关于32位的内容:如何在google v8(和nodejs)中渲染32位unicode字符
编辑:一个有趣的例子function hexToString(hex) {
hex = hex.substring(2) // remove the '0x' part
var string = ""
while (hex.length % 8 != 0) { // we need it to be multiple of 8
hex = "0" + hex;
}
for (var i = 0; i < hex.length; i+= 8){
string += String.fromCharCode(parseInt(hex.substring(i,i + 4), 16), parseInt(hex.substring(i + 4,i + 8), 16))
}
return string;
}
console.log(hexToString("0xD83DDCA3"))
相关文章:
- 用有限的字符集压缩字符串,然后在JS中解压缩
- 在树枝模板上从数据库中解压缩HTML字符串
- 使用JavaScript将压缩文本文件加载到字符串中
- 在C#中压缩字符串,然后在JavaScript中解压缩
- 使用 javascript 压缩包含嵌入图像的 HTML 字符串
- 谷歌闭包编译器不压缩字符串值
- 在JavaScript/NodeJS中压缩十六进制字符串
- 长字母strjng到短字符串压缩
- URL 哈希参数的 JavaScript 字符串压缩
- 为什么LZMA-JS压缩的字符串的大小比压缩前大大约10倍
- 使用 JavaScript 编码和压缩字符串
- 通过替换常用字符串来压缩 JSON
- 字符串中包含的大型基数 10 的数字的最佳压缩
- 如何在用户脚本中压缩/解压缩字符串
- 解压缩后如何取回原始字符串 - Zlib
- 压缩 JSON 字符串?(以及一般的字符串)
- 在常规压缩的替换字符串中插入 $
- 无法解决此字符串压缩问题
- c#中的字符串压缩和Javascript中的解压
- javascript字符串压缩与localStorage