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 中运行良好。任何人都可以帮忙吗?
提前致谢
从您的评论看来您正在打电话
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 无法提醒它。你不应该使用这种字符串。
您需要转换每 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