gpt4 book ai didi

C#:将简单结构列表转换为 byte[]

转载 作者:行者123 更新时间:2023-11-30 12:17:14 26 4
gpt4 key购买 nike

在 C# 4.0 中,假设我有

List<HSZPAIR> myList

具有三个元素,其中 HSZPAIR 结构定义为:

[StructLayout(LayoutKind.Sequential)]
public struct HSZPAIR
{
public IntPtr hszSvc;
public IntPtr hszTopic;
}

如何为整个 myList 创建一个字节数组?在 C++ 中,您可以将结构数组转换为字节数组。我不确定如何在 C# 中执行此操作。

我在 DDEML 库中使用一个旧的 Windows API 函数,它需要一个字节数组和数组中的元素数量作为参数。如果您对更多背景感兴趣,API 函数是:

[DllImport("user32.dll", EntryPoint="DdeCreateDataHandle", CharSet=CharSet.Ansi)]
public static extern IntPtr DdeCreateDataHandle(int idInst, byte[] pSrc, int cb, int cbOff, IntPtr hszItem, int wFmt, int afCmd);

Here is it's documentation on MSDN . pSrc 参数是 HSZPAIR 结构的字节数组。数组的大小是 cb 参数。

最佳答案

将结构转换为字节数组有点痛苦。你必须自己序列化它。但这可能不是必需的。

鉴于您的列表:

List<HSZPAIR> myList;

你可以通过调用ToArray获取一个数组:

HSZPAIR[] myArray = myList.ToArray();

现在,更改您的托管原型(prototype),使其采用 HSZPAIR[] 而不是 byte[]:

public static extern IntPtr DdeCreateDataHandle(
int idInst, HSZPAIR[] pSrc, int cb, int cbOff, IntPtr hszItem, int wFmt, int afCmd);

那应该行得通。毕竟,正如您所指出的,HSZPAIR 数组实际上只是一个字节数组。

关于C#:将简单结构列表转换为 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107359/

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