gpt4 book ai didi

javascript - 如何将一个十六进制数压缩成一个短字符串?

转载 作者:行者123 更新时间:2023-11-29 17:54:35 25 4
gpt4 key购买 nike

我有一个未知长度的十六进制数,我想将它转换成一个尽可能短的字符串。稍后能够将新字符串转换回原始数字。

由于每个数字只有 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 位,因此我们可以将 4 个十六进制字符打包为 1:

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 位的更多信息:how to render 32bit unicode characters in google v8 (and nodejs)

编辑:一个有趣的例子

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"))

关于javascript - 如何将一个十六进制数压缩成一个短字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40471258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com