不带编码的十六进制字符串

时间:2016-04-07 13:55:44

标签: javascript node.js string

我有一个包含十六进制值的字符串,例如: “1BB3AE3E”。

现在我想把它转换成一个完全字节表示的字符串(预期结果“≥Æ>”)(所以写入文件,用hex viewer打开会显示“1BB3AE3E”)

这就像Ruby的

['1BB3AE3E'].pack('H*')

我尝试过创建Buffer.toString,String.fromCharCode,但它没有按照我的预期工作。我得到的结果是

var input = "1BB3AE3E"
var buffer = new Buffer(input, "hex")
var result = buffer.toString("binary")

它产生的文件包含“³®>”其中十六进制为:1B C2 B3 C2 AE 3E。 那些 C2 来自哪里?我怎样才能使它发挥作用?

我也试过

var hexes = this.match(/.{1,2}/g) || [];
var back = "";
for(j = 0; j< hexes.length; j++) {
    back += String.fromCharCode(parseInt(hexes[j], 16));
}

但没有白费。效果如上。

2 个答案:

答案 0 :(得分:0)

//var result= parseInt(buffer, 16).toString(2)
  var result= parseInt(input, 16).toString(2)

Output:"11011101100111010111000111110"

另见: https://gist.github.com/faisalman/4213592

答案 1 :(得分:0)

为了做一个好的代码你应该是hexDecode和原型以及fromCharCode和parseInt,你可以做例子:

String.prototype.hexDecode = function(){
    var j;
    var hexes = this.match(/.{1,4}/g) || [];
    var back = "";
    for(j = 0; j<hexes.length; j++) {
        back += String.fromCharCode(parseInt(hexes[j], 16));
    }

    return back;
}