Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将c字符数组[128]封送到c#_C#_Dll_Struct_Interop_Marshalling - Fatal编程技术网

将c字符数组[128]封送到c#

将c字符数组[128]封送到c#,c#,dll,struct,interop,marshalling,C#,Dll,Struct,Interop,Marshalling,这个问题很简单,但我找不到一个直接的答案:我想在我的C结构中有一个128字节的字符数组。我在64位Windows下运行这个。我想使用以下命令将其封送到c#: C代码: typedef struct s_parameterStuct { int count; char name[ 128 ]; } parameterStruct; c#代码: 由于字符在c#中是2个字节,因此大小应该是128还是256。两者似乎都很好,但我知道其中只有一个是正确的。大小应该是64,因为64个2字节

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

C代码:

typedef struct s_parameterStuct
{
    int count;
    char name[ 128 ];
} parameterStruct;
c#代码:


由于字符在c#中是2个字节,因此大小应该是128还是256。两者似乎都很好,但我知道其中只有一个是正确的。

大小应该是64,因为64个2字节数量的大小与128个1字节数量的大小相同


我将使用字节数组进行封送处理,因为否则,为了获得C字符(是单字节),您必须忍受拆分值。

如果要封送到C字符数组(不确定为什么要封送),则C端的大小将设置为64


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

您可以只使用字节数组,对吗?@Wug,C#的新手,所以没有想到这一点。所以我可以在C端使用“char[]”,在C#端使用“byte[]”。好。但是,为了完整起见,这是正确的:如果两边都使用char,那么sizeConst=128或256?两者都不是。大概是64。也就是说,你不应该混合不同大小的数据类型(特别是如果你不得不问的话)@Wug,“我不应该混合数据类型”你的意思是我不应该在c端使用char和在c端使用char(因为这是混合的),而c端的char和在c端的byte是不混合的吗?在数据类型上,我指的是不同大小的数据类型。它们都称为
char
,但一个是1字节,另一个是2字节。
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class parameterStuct
{
    public int count;

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