在Node.js中将二进制转换为十六进制

3

我想问一下,在将我的二进制数据插入表之前,我想将其转换为十六进制格式。

var net  = require('net');

var server = net.createServer(function(socket){

    socket.on('data',function(data){
    var bindata= data.toString('binary');

    //filter(bindata);

    //if no error convert to hex.
    var hexdata = bindata.toString('hex');

    //insert hexdata here.
});

server.listen(3030,'127.0.0.1', function () {
    console.log("server is listenining");
});

但问题是二进制数据将被插入。

2个回答

13
parseInt("10101001", 2).toString(16)
// => "a9"

编辑:我想我误解了问题。你的data一开始是Buffer,然后你将其转换为字符串,然后你想要它作为十六进制吗?如果是这样,只需执行data.toString('hex')即可。如果你已经操作过bindata,那么请重新构建为缓冲区:

var bindata = data.toString('binary');
// do something with bindata
var hexdata = new Buffer(bindata, 'ascii').toString('hex');

为什么要使用ASCII?因为如果有人发送与“application/x-octet-stream”兼容的内容,那么您在原始“data”缓冲区中获得的就是ASCII。如果他们发送的是UTC字符串,那么我假设您首先不会使用十六进制。 - Amadan
我可以问一下,为什么我把文件转换成图像后,即使我得到了完整的二进制图像数据,图像也没有被正确转换,图像上有条纹状线条。 - jemz
没有访问您的代码或图像文件的权限,无从得知。使用vbindiff、bsdiff或类似工具来查找实际上的差异。 - Amadan
我已经在这里提问了http://stackoverflow.com/questions/30272013/node-js-not-properly-converting-binary-image-back-to-image-file,但没有人尝试帮助我。我希望你能帮助我。谢谢您的帮助。 - jemz
1
我修好了。 :) 非常感谢 :) - jemz
显示剩余4条评论

0

试试这个:

parseInt("1111", 2).toString(16);

parseInt 中的第二个参数 radix 表示将“111”值转换为二进制,而 toString(16) 则将其转换为十六进制。


这似乎与现有答案相同。 - Grisha Levit

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