不使用编码将十六进制转换为字符串

3
我有一个包含十六进制值的字符串,类似于:"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()成功实现了我的目标,但这是异步操作,需要我将缓冲区存储到文件中,然后再从文件中读取。看起来有些过度设计了。 - Marcin Bak
2个回答

0

请检查一下,我现在电脑上没有Node,但这个在JS上可以工作。 - Koustav Ray

0

要写出好的代码,你应该使用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;
}

我已经尝试过了,不幸的是它不起作用。它基本上提供了与我的代码相同的效果(只有当你这样做时.match(/.{1,2}/g))。 - Marcin Bak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接