如何在JavaScript中从Hex转换为ASCII?

Q8Y*_*Q8Y 75 javascript

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

例如:

32343630将是2460

Del*_*ani 150

function hex2a(hexx) {
    var hex = hexx.toString();//force conversion
    var str = '';
    for (var i = 0; (i < hex.length && hex.substr(i, 2) !== '00'); i += 2)
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    return str;
}
hex2a('32343630'); // returns '2460'
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是错误的,因为:`&amp;&amp; hex.substr(i, 2) !== '00'`。正如 @steinybot 注意到的,这会在第一个“0”处中止,因此不会完全将十六进制转换为字符串。正确的解决方案是:`function hex2a(hexx) { var hex = hexx.toString();//强制转换 var str = ''; for (var i = 0; i &lt; hex.length; i += 2) str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); 返回字符串;}` (6认同)
  • 这是行不通的。`console.log(hex2a('32343630') === hex2a('3234363000')); // 返回“true”!!!`。 (2认同)

小智 35

为了完整起见,反向功能:

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
Run Code Online (Sandbox Code Playgroud)

  • 关于此实现的注意事项:当`hex`值介于0x0和0x9之间时,必须手动插入"0".为此,我将你的`arr.push(hex)`更改为`arr.push(hex.length> 1 && hex ||"0"+ hex);`. (3认同)

0x8*_*00D 22

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

var input  = '32343630';
var output = new Buffer(input, 'hex');
log(input + " -> " + output);  // Result: 32343630 -> 2460
Run Code Online (Sandbox Code Playgroud)

  • 最佳解决方案!使用本机函数。这应该是公认的答案! (3认同)
  • 然后将“output”转换为 ASCII,使用“output.toString()” (3认同)

Sam*_*age 20

你可以用这个..

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


Ayu*_*hya 7

我在web3库中找到了一个有用的函数.

var hexString = "0x1231ac"
string strValue = web3.toAscii(hexString)
Run Code Online (Sandbox Code Playgroud)

  • 该函数现在在 v1.2.9 中称为“web3.utils.hexToAscii(hexString)” https://web3js.readthedocs.io/en/v1.2.9/web3-utils.html?highlight=ascii#hextoascii (2认同)

小智 7

** 十六进制转字符串**

let input  = '32343630';
Run Code Online (Sandbox Code Playgroud)

注意: let output = new Buffer(input, 'hex'); // 这已被弃用

let buf = Buffer.from(input, "hex");
let data = buf.toString("utf8");
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么这被否决了,在我看来,这是 2020 年 Nodejs 的最佳答案 (3认同)

Zib*_*bri 5

console.log(

"68656c6c6f20776f726c6421".match(/.{1,2}/g).reduce((acc,char)=>acc+String.fromCharCode(parseInt(char, 16)),"")

)
Run Code Online (Sandbox Code Playgroud)