nodejs将空终止的字符串添加到缓冲区

时间:2014-02-25 14:06:18

标签: node.js

我正在尝试复制数据包。

此包:

2C 00 65 00 03 00 00 00   00 00 00 00 42 4C 41 5A
45 00 00 00 00 00 00 00   00 42 4C 41 5A 45......

2c 00是数据包的大小...
65 00是数据包ID 101 ...
03 00是数组中元素的数量......

现在我的问题出现了,42 4C 41 5A 45是一个字符串......如果该字符串完整,那么该字符串中只有3个实例...但我的问题是它不仅仅是null终止了它

00 00 00 00这些实例之间的空格。

我的代码:

function channel_list(channels) {
  var packet = new SmartBuffer();

  packet.writeUInt16LE(101); // response packet for list of channels
  packet.writeUInt16LE(channels.length)

  channels.forEach(function (key){
    console.log(key);
    packet.writeStringNT(key);
  });

  packet.writeUInt16LE(packet.length + 2, 0);

  console.log(packet.toBuffer());
}

但是如何添加填充?

我正在使用此软件包https://github.com/JoshGlazebrook/smart-buffer/

1 个答案:

答案 0 :(得分:2)

Smart-Buffer会为您跟踪其位置,因此您无需指定偏移量即可知道插入数据的位置以填充字符串。您可以使用现有代码执行类似的操作:

channels.forEach(function (key){
    console.log(key);
    packet.writeString(key);   // This is the string with no padding added.
    packet.writeUInt32BE(0);   // Four 0x00's are added after the string itself.
});

我假设你想:42 4C 41 5A 45 00 00 00 00 42 4C 41 5A 45 00 00 00 00等。

根据评论进行编辑:

没有内置的方法来做你想做的事,但你可以这样做:

channels.forEach(function (key){
    console.log(key);
    packet.writeString(key); 
    for(var i = 0; i <= (9 - key.length); i++)
        packet.writeInt8(0);
});