【发布时间】:2018-07-06 22:20:08
【问题描述】:
我正在尝试将结构中动态分配的 char 数组编组为 C#。该结构有一个指向数组的指针。问题是 char 数组包含多个以空字符结尾的字符串,最后一个字符串以两个连续的空字符结尾。
如果我尝试将其编组为LPStr,我将只获得“列表”中的第一个字符串。
我尝试使用 UnmanagedMemoryStream 但它需要知道数组的长度。
有没有办法在不知道数组长度的情况下将字节作为流读取? (除了使用 n 长度字节缓冲区并不断增加指针,直到找到两个连续的空终止字符)。
【问题讨论】:
-
这听起来应该计算字符串长度没有问题。
-
你必须自己编组。将结构成员声明为 IntPtr。使用 Marshal.ReadByte() 循环以复制到 byte[],在 0 处使用 Encoding.Default.GetString() 转换子字符串。直到找到第二个 0。
标签: c# c++ pinvoke marshalling