gpt4 book ai didi

c# - 如何在 Node.js 中解压一个 c# 打包的结构

转载 作者:行者123 更新时间:2023-11-28 04:40:04 28 4
gpt4 key购买 nike

我们使用用 cpp 编写的私有(private)源库,在 C# 中使用一些类似的结构来将数据从 cpp 库中获取到 c# 结构中,但问题是我不知道如何解压 CPP Marshalled Nodej.js 中的缓冲区:

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;
}

感谢您的帮助:)

最佳答案

使用 npm struct package :

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;
};

关于c# - 如何在 Node.js 中解压一个 c# 打包的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394896/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com