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

时间:2010-09-19 12:30:05

标签: javascript

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

前:

  

32343630将是2460

9 个答案:

答案 0 :(得分:141)

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'

答案 1 :(得分:34)

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

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

答案 2 :(得分:19)

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

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

答案 3 :(得分:18)

你可以使用它..

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

答案 4 :(得分:6)

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

var hexString = "0x1231ac"
string strValue = web3.toAscii(hexString)

答案 5 :(得分:1)

我发现如果您必须处理02(STX)或03(ETX)等控制字符,10下的任何内容,上述解决方案将无效将被读作一个数字,然后抛弃一切。我试图通过串行通信解析这个问题。所以,我先收到接收到的十六进制字符串并将其放入缓冲区对象,然后将十六进制字符串转换为字符串数组,如下所示:

buf = Buffer.from(data, 'hex');
l = Buffer.byteLength(buf,'hex');
for (i=0; i<l; i++){
char = buf.toString('hex', i, i+1);
msgArray.push(char);

然后。加入

message = msgArray.join('');

然后我创建了一个hexToAscii函数,就像@Delan Azabani上面的回答一样......

function hexToAscii(str){
    hexString = str;
    strOut = '';
        for (x = 0; x < hexString.length; x += 2) {
            strOut += String.fromCharCode(parseInt(hexString.substr(x, 2), 16));
        }
    return strOut;    
}

然后在&#39;消息&#39;

上调用hexToAscii函数
message = hexToAscii(message);

这种方法还允许我遍历数组并使用控制字符切片到传输的不同部分,这样我就可以只处理我想要的部分数据。 希望这有助于其他人!

答案 6 :(得分:0)

@michieljoris提出的反向函数实现的优化版本(根据@Beterraba和@Mala的评论):

function a2hex(str) {
  var hex = '';
  for (var i = 0, l = str.length; i < l; i++) {
    var hexx = Number(str.charCodeAt(i)).toString(16);
    hex += (hexx.length > 1 && hexx || '0' + hexx);
  }
  return hex;
}
alert(a2hex('2460')); // display 32343630

答案 7 :(得分:0)

console.log(

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

)

答案 8 :(得分:-1)

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

let input ='32343630';

注意:let output = new Buffer(input,'hex'); //不推荐使用

let buf = new Buffer.from(input,“ hex”);

让数据= buf.toString(“ utf8”);