繁体   English   中英

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

[英]How to convert from Hex to ASCII in JavaScript?

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

前任:

32343630 将是 2460

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'

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

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

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

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

你可以用这个..

 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)

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

let input  = '32343630';

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

let buf = Buffer.from(input, "hex");
let data = buf.toString("utf8");

我发现如果您必须处理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;    
}

然后在“消息”上调用hexToAscii函数

message = hexToAscii(message);

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

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

@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

我使用这个,对我来说似乎更清楚,因为我还收到带有“30 31 38 30 38 30”之类的空格的数据,输出为 018080

hexToString(hex: string): string {
   return hex.split(' ').map(s => string.fromCharCode(parseInt(s,16))).join('');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM