c# - 将 c 字符数组 [128] 编码到 c#

标签 c# dll struct interop marshalling

简单的问题,但我找不到直接的答案:我想在我的 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。两者似乎都可以正常工作,但我知道只有一个是正确的。

最佳答案

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

我会使用字节数组进行编码(marshal)处理,否则您将不得不忍受拆分值以获得 C 字符(单字节)。

关于c# - 将 c 字符数组 [128] 编码到 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044559/

相关文章:

c# - TLS 1.2 支持是否仅取决于 .NET 框架的版本?

c# - RegAsm regfile 开关不提供与代码库开关相同的输出

arrays - 为什么 popFirst 抛出错误,但 removeFirst 有效?

c# - Gurobi,C# : Can't convert from 'int' to System. Collections.Generic.List<int>

c# - Intellisense 停止在 Visual Studio Code、OSX 上运行

c# - 来自 PowerBuilder 的 DLL 调用

c# - 任何人都可以解释下面一段 Windows 匿名/恶作剧代码吗?

c++ - 是否有一种可扩展的方法可以从 C++ 中的数组初始化结构体?

c - 用C读取二进制文件

c# - 如果此构建错误不断重复,我该怎么办