如何将字符串'0x900x100xe8'转换为nodejs中的Buffer?

时间:2013-12-20 12:27:00

标签: node.js

我正在开发一个微控制器设备将数据发送到Web服务器的项目。

我创建了一个网页,用户可以使用该表单向设备发送命令,并可以在同一页面上查看设备的响应。

问题是设备只能理解十六进制命令。所以我需要从页面发送十六进制命令,如

0x800xe80x10

现在我可以从网页上的表单中读取用户提交的命令,但我无法将其转换为十六进制。我读过有关Buffer但它将每个ASCII字符更改为十六进制。所以 0x80 会产生类似

的内容

30 78 38 30

虽然我想要是

80

谢谢

3 个答案:

答案 0 :(得分:2)

缓冲区可以传递十六进制数据,它们只是在每个字节之前不期望0x,所以你可以这样做:

var userHex = '0x800xe80x10';
var buf = new Buffer(userHex.replace(/0x/g, ''), 'hex');
// buf == <Buffer 80 e8 10>

答案 1 :(得分:0)

function hexStr2Buf(hexStr) {
    var hexArray = hexStr.split('0x').filter(function(e) {
        return e.length === 2;
    });

    var numArray = hexArray.map(function (e) {
        return parseInt(e, 16);
    });

    return Buffer(numArray);
}

var buff = hexStr2Buf('0x800xe80x10');

console.log(buff);

输出:

<Buffer 80 e8 10>

答案 2 :(得分:-1)

如果您只想将该命令发送到服务器端,请使用:

var buf = new Buffer([128, 232, 32]);
console.log(buf);

其中128,232,32是0x800xe80x10。任何其他方法都会引入冗余