我正在尝试复制数据包。
此包:
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());
}
但是如何添加填充?
答案 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);
});