gpt4 book ai didi

c# - 固定大小的字符串获取/设置

转载 作者:行者123 更新时间:2023-11-30 22:10:08 27 4
gpt4 key购买 nike

我对结构中的固定大小字符串和数据绑定(bind)的获取/设置方法有疑问。

我的结构:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct MyStruct
{
public int Var1 { get; set; }
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string Var2;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string Var3;
public int Var4 { get; set; }
};

当我设置 { get;为 Var2 和 Var3 设置 } 我得到错误:

error CS0592: Attribute 'MarshalAs' is not valid on this declaration type. It is only valid on 'field, param, return' declarations.

我如何为 Var2/Var3 设置/获取方法并且不改变结构大小

最佳答案

问题是 string 是 C# 类型,不能映射到 C 类型。尝试将字符串私下编码为 char[],然后将它们转换为 C# 中的字符串(无编码)。您还需要更改 MarshalAs 以表示您将编码数组,而不是字符串。

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct MyStruct
{
public int Var1 { get; set; }
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
private char[] _Var2;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
private char[] _Var3;
public int Var4 { get; set; }

public string Var2 {
get {
return new string(_var2);
}
set {
this._var2 = value.ToCharArray();
}
}
public string Var3 {
get {
return new string(_var3);
}
set {
this._var3 = value.ToCharArray();
}
}
};

关于c# - 固定大小的字符串获取/设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com