【问题标题】:String from hex without encoding来自十六进制的字符串,没有编码
【发布时间】:2016-07-28 11:08:30
【问题描述】:

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

现在我想将其转换为与该字节表示形式完全相同的字符串(预期结果“≥Æ>”)(因此写入文件,并使用十六进制查看器打开会显示“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));
}

但没有白费。效果如上。

【问题讨论】:

  • 我已经设法通过创建流wstream = fs.createWriteStream("file.txt"); wstream.write(buff); wstream.end() 来实现我想要的,但这是异步操作,需要我将缓冲区存储到文件中并再次从那里读取。看起来有点矫枉过正。

标签: javascript node.js string


【解决方案1】:

为了做一个好的代码你应该是hexDecode和protoype以及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;
}

【讨论】:

  • 我已经尝试过了,不幸的是它不起作用。它基本上提供与我的代码相同的效果(仅当您执行 this.match(/.{1,2}/g) 时)。
【解决方案2】:
//var result= parseInt(buffer, 16).toString(2)
  var result= parseInt(input, 16).toString(2)

Output:"11011101100111010111000111110"

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

【讨论】:

  • 请立即检查,我的电脑上现在没有节点..但这适用于 js
猜你喜欢
  • 2015-11-20
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2018-08-21
  • 2013-01-03
  • 1970-01-01
相关资源
最近更新 更多