如何在 JavaScript 中从十六进制转换为 ASCII?

IT技术 javascript
2021-01-19 23:05:39

如何在 JavaScript 中将Hex字符串转换为字符串ASCII

前任:

32343630 将是 2460

6个回答
function hex2a(hexx) {
    var hex = hexx.toString();//force conversion
    var str = '';
    for (var i = 0; i < hex.length; i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}
hex2a('32343630'); // returns '2460'
这个答案是错误的,因为:&& hex.substr(i, 2) !== '00'正如@steinybot 所注意到的,这会在第一次中止0,因此不会将十六进制完全转换为字符串。正确的解决办法是: function hex2a(hexx) { var hex = hexx.toString();//force conversion var str = ''; for (var i = 0; i < hex.length; i += 2) str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); return str; }
2021-03-16 23:05:39
编辑历史表明NUL是故意添加的缺陷。此答案已损坏。
2021-04-11 23:05:39
这不起作用。console.log(hex2a('32343630') === hex2a('3234363000')); // returns 'true'!!!.
2021-04-13 23:05:39

另一种方法(如果您使用 Node.js):

var input  = '32343630';
const output = Buffer.from(input, 'hex');
log(input + " -> " + output);  // Result: 32343630 -> 2460
然后转换output为 ASCII,使用output.toString()
2021-03-27 23:05:39
最佳解决方案!使用本机函数。这应该是公认的答案!
2021-03-30 23:05:39
new Buffer(input,"hex").toString() 给出原始字符串
2021-04-09 23:05:39

为了完整起见,反向函数:

function a2hex(str) {
  var arr = [];
  for (var i = 0, l = str.length; i < l; i ++) {
    var hex = Number(str.charCodeAt(i)).toString(16);
    arr.push(hex);
  }
  return arr.join('');
}
a2hex('2460'); //returns 32343630
你有一个错字,你忘了把右括号放在toString(16)(第 4 行)之后。;-)
2021-03-16 23:05:39
字符串连接实际上比字符串数组构造和加入 javascript 更快
2021-03-27 23:05:39
关于此实现的注意事项:当hex值介于 0x0 和 0x9 之间时,您必须手动插入“0” 为此,我将您的更改arr.push(hex)arr.push(hex.length > 1 && hex || "0" + hex);.
2021-04-09 23:05:39

你可以用这个..

var asciiVal = "32343630".match(/.{1,2}/g).map(function(v){
      return String.fromCharCode(parseInt(v, 16));
    }).join('');
    
document.write(asciiVal);

我在web3库中发现了一个有用的函数

var hexString = "0x1231ac"
string strValue = web3.toAscii(hexString)
该函数现在web3.utils.hexToAscii(hexString)在 v1.2.9 web3js.readthedocs.io/en/v1.2.9/...
2021-04-02 23:05:39