6

简单的问题,但我找不到直接的答案:我想在我的 C 结构中有一个 128 字节的 char 数组。我在 64 位 Windows 下运行它。我想使用以下命令将其编组到 c#:

C代码:

typedef struct s_parameterStuct
{
    int count;
    char name[ 128 ];
} parameterStruct;

和 c# 代码:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class parameterStuct
{
    public int count;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
    public char[] name;
}

由于 char 在 c# 中是 2 个字节,因此 SizeConst 应该是 128 还是 256。两者似乎都可以正常工作,但我知道其中只有一个是正确的。

4

2 回答 2

2

大小为 64,因为 64 个 2 字节数量与 128 个 1 字节数量具有相同的大小。

我会使用字节数组进行封送处理,否则您将不得不忍受拆分值才能获得 C 字符(它们是单字节)。

于 2012-08-20T21:15:40.960 回答
0

如果要编组到 C# char 数组(不知道为什么要这样做),则在 C# 端将大小设置为 64。

但是,您应该编组为字节数组(大小为 128),然后使用适当的 Text.Encoding 调用将字节数组转换为 .net 字符串(假设您需要字符串)。

于 2012-08-20T21:24:22.443 回答