我们使用cpp编写的私有源库和C#中的绑定使用这样的结构来将cpp库中的数据转换为c#结构,但问题是我不知道如何解压缩Nodej.js中的CPP Marshalled缓冲区:
C#中的结构:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
unsafe public struct TheClass
{
public byte XXX;
public int XXX;
public int XXX;
public ushort XXX;
public byte XXX;
public byte XXX;
public byte XXX;
public byte XXX;
public byte XXX;
public byte XXX;
public fixed byte XXX[12];
public fixed byte XXX[5];
public short XXX;
}
感谢您的帮助:)
答案 0 :(得分:1)
const TheClass = Struct()
.word8('XXX')
.word32Sle('XXX')
.word32Sle('XXX')
.word16Ule('XXX')
.word8('XXX')
.word8('XXX')
.word8('XXX')
.word8('XXX')
.word8('XXX')
.word8('XXX')
.array('XXX', 12, 'word8')
.array('XXX', 5, 'word8')
.word16Sle('XXX');
当然,请使用正确的字段名称替换所有XXX
。
然后,您可以使用此对象来解析Buffer
对象的内容:
TheClass._setBuff(yourBuffer);
// Read the data for field XXX (using a valid name).
var someField = TheClass.get('XXX');
// Or use the proxy object:
var someOtherField = TheClass.fields.XXX;
使用lodash,您可以编写一个帮助方法,该方法将解析并返回结构数据的副本:
Struct.prototype.parse = function (buffer) {
const oldBuff = this.buffer();
this._setBuff(buffer);
const v = _.cloneDeep(this.fields);
this._setBuff(oldBuff);
return v;
};