javascript中十六进制转字符串

问题描述 投票:0回答:2
function hex2a(hex) 
{
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}     

此功能在 chrome 中不起作用,但在 mozila 中运行良好。任何人都可以帮忙吗?

提前致谢

javascript
2个回答
14
投票

从您的评论看来您正在打电话

hex2a('000000000000000000000000000000314d464737');

并提醒结果。

你的问题是你正在构建一个以 0x00 开头的字符串。此代码通常用作空终止字符串的字符串终止符。

删除开始处的

00

hex2a('314d464737');

您可以像这样修复您的函数以跳过那些空“字符”:

function hex2a(hex) {
    var str = '';
    for (var i = 0; i < hex.length; i += 2) {
        var v = parseInt(hex.substr(i, 2), 16);
        if (v) str += String.fromCharCode(v);
    }
    return str;
}  

请注意,充满 0x00 的字符串仍可能在其他上下文中使用,但 Chrome 无法提醒它。你不应该使用这种字符串。


0
投票

您需要转换每 2 位十六进制数字

'314d464737'.match(/.{1,2}/g) -> [31,4d,46,47,37]

function a2hex(text){
    return [...text].map(x => 
    x.codePointAt()
     .toString(16)
     .padStart(2,"0")
   ).join('')
}
function hex2a(text){
    return String
     .fromCharCode(...text.match(/.{1,2}/g)
     .map(e => 
       parseInt(e, 16))
     )
}

var a = a2hex("hello")
var b = hex2a(a)
console.log(a) // 68656c6c6f
console.log(b) // hello

© www.soinside.com 2019 - 2024. All rights reserved.