将一个C语言的char数组[128]转换为C#

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

在c#中,一个char占用2个字节,那么SizeConst应该是128还是256呢?两者都能正常工作,但我知道只有其中一个是正确的。


3
你可以只使用一个字节数组,对吗? - Wug
@Wug,我是C#的新手,所以没有考虑到这一点。因此,在C端可以始终使用"char []",在C#端可以使用"byte []"。很好。但是,为了完整起见,如果我在两端都使用char,那么sizeConst=128还是256才是正确的呢? - PaeneInsula
不是。很可能是64。话虽如此,如果你必须问的话,就不应该混合不同大小的数据类型。 - Wug
@Wug,“不要混合数据类型”的意思是我不应该在C和C#两端都使用char(因为这是混合的),而在C端使用char,在C#端使用byte则不是混合的吗? - PaeneInsula
通过数据类型,我指的是不同大小的数据类型。它们都被称为“char”,但一个是1字节,另一个是2字节。 - Wug
2个回答

2

对于大小的计算,答案是64,因为64个2字节的量与128个1字节的量相同。

我会使用字节数组进行编组,因为否则你将不得不忍受分割值以获取C字符(这些字符是单字节的)。


0
如果您想要将数据序列化到 C# char 数组中(不确定为什么要这样做),则在 C# 端需要将其大小设置为 64。
然而,您应该将数据序列化到 byte 数组中(大小为 128),然后使用适当的 Text.Encoding 调用将 byte 数组转换为 .net 字符串(假设您需要一个字符串)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接