我有一个 C++ 应用程序,它正在向我的 C# 应用程序发送一个序列化的结构,我想自动将字节直接复制到我在 C# 中创建的新结构中。但是,通过网络发送的结构似乎有 3 字节的块,这看起来很奇怪。
这是 C++ 结构:
typedef struct ATTQueryAgentStateConfEvent_t {
ATTWorkMode_t workMode; /* enum type */
ATTTalkState_t talkState; /* enum type */
long reasonCode;
ATTWorkMode_t pendingWorkMode; /* enum type */
long pendingReasonCode;
} ATTQueryAgentStateConfEvent_t;
我在 C# 中创建的结构:
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct ATTQueryAgentStateConfEvent_t
{
public ATTWorkMode_t workMode; /* enum type */
public ATTTalkState_t talkState; /* enum type */
public long reasonCode;
public ATTWorkMode_t pendingWorkMode; /* enum type */
public long pendingReasonCode;
};
以下是从 C++ 应用程序接收到的字节(前 6 个字节似乎是一些标头):
02 00 68 00 30 0f 0a 01 03 0a 01 01 02 01 00 0a 01 ff 02 01 00
^^ ^^ ^^ ^^ ^^
上面我标记了我期望收到的值(3、1、0、-1、0)。在定义 C# 结构时,我尝试了不同的 Pack 值,但它根本没有正确解析。这是我用来在 C# 中填充结构的命令:
ATTQueryAgentStateConfEvent_t stateDetails = (ATTQueryAgentStateConfEvent_t)Marshal.PtrToStructure(Marshal.UnsafeAddrOfPinnedArrayElement(confPrivData.data, 6), typeof(ATTQueryAgentStateConfEvent_t));
我做错了什么,或者这个 C++ 应用程序正在使用一些自定义序列化程序?我希望 C++ 枚举和 long 为 4 个字节......我知道我可以逐字节提取值,但如果可能的话,我想自动化它。感谢您的任何提示。