JavaScript中的十六进制转字符串

11
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;
}     

这个函数在谷歌浏览器中无法工作,但在火狐浏览器中可以正常工作。请问有谁能帮忙。

提前感谢。


2
在我这里,似乎在Chromium上工作:http://jsfiddle.net/fDzqu/ - Denys Séguret
2
你能澄清一下“不工作”的意思吗?当你尝试它时会发生什么,这与你的期望有何不同?你是否收到任何错误消息?当我尝试在Chrome中运行它时,它可以正常工作。http://jsfiddle.net/Guffa/uT2q5/ - Guffa
它只显示警报中的 'A',尝试像这样: 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; }function output() { var text=hex2a(000000000000000000000000000000314d464737); alert('嗨'); alert('value'+text); } ​ 它无法正常工作:( - Aaradhana
@karthick:我插入了alert并在Chrome中检查了str变量的值,它显示的值是[][][][][][][][][][][][][][]6ghU8。 - Aaradhana
我看到你在Stackoverflow上找到了这个函数:(https://dev59.com/cG865IYBdhLWcg3wkfgW)。 它适用于我的Chrome和Mozilla。 你如何调用该函数,并且你期望得到什么结果? - Andries
显示剩余5条评论
1个回答

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无法警示。您不应该使用这种类型的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接