2010-09-19 83 views
53

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

例:

32343630这将是2460

+6

我敢肯定有一个jQuery插件为^^ – AndiDog 2010-09-19 12:35:41

+2

jQuery是主要是为了DOM操作,并在较小程度上,重新实现的东西像'Array.prototype。{地图,foreach}的()'过时/受限浏览器。老实说,这看起来更像[Underscore.js's](http://underscorejs.org/)领域。 – 2016-09-07 16:30:18

+0

@AndiDog对于我们这些使用节点 – 2017-10-23 21:53:11

回答

114
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' 
32

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

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

的人没有用处:关于这个实现的注释:当hex的值在0x0到0x9之间时,你必须手动插入一个“0”。为此,我将'arr.push(hex)'更改为'arr.push(hex.length> 1 && hex ||“0”+ hex);'。 – Beterraba 2014-05-16 19:25:57

+0

字符串连接实际上比字符串数组构造更快并且加入javascript – Mala 2014-07-11 20:53:29

+0

您有一个拼写错误,忘记在'toString(16)'(第4行)之后放置右括号。 ;-) – Arjun 2015-12-07 11:07:51

10

你可以使用这个..

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

7

另一种方式来做到这一点(如果你使用的Node.js):

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

我发现,如果你要处理的控制字符,如上述方案将无法正常工作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功能就像@Del一个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;  
 
}

然后叫上

message = hexToAscii(message);

这种做法也让我通过遍历数组 '消息' 的hexToAscii功能使用控制字符切片到传输的不同部分,这样我就可以只处理我想要的部分数据。 希望这可以帮助别人!

1

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

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