在C#中,是否有与INT和字符串成员变量相当的C 联合
Is there an equivalent of c++ union with int and string member variables in c#?
在C 中,我们可以通过使用工会将相同的地址用于字符串和int变量。我希望在C#中定义一个联合,该联合具有两个类型INT和字符串的成员变量。
我尝试了3种方法来定义联合,其中两个工作显示的工作看起来不等同于C 的结合。第三个似乎等效的联合显示错误"应用在休息模式"
这起作用,但似乎不等同于C 联合,因为在字符串变化的同时,整数的连续地址保持不变。(如果结合,一对int和字符串必须具有相同的地址(。
[StructLayout(LayoutKind.Explicit, Size = 128)]
public struct File_element
{
[FieldOffset(0)]
public int Line_no;
[FieldOffset(4)]
public string Line;
}
这也有效,但我必须定义两个对象,而不是一个对象,但仍然不确定其等效于C 的联合
[StructLayout(LayoutKind.Explicit, Size = 128)]
public struct File_element
{
[FieldOffset(0)]
public int Line_no;
}
[StructLayout(LayoutKind.Sequential)]
public struct File_element2
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string Line;
}
我正在寻找的是,我认为这将是C 工会的确切等效的,但是当我尝试运行
时,这显示了一个错误("应用程序处于断路模式"([StructLayout(LayoutKind.Explicit, Size = 128)]
public struct File_element
{
[FieldOffset(0)]
public int Line_no;
[FieldOffset(0)]
public string Line;
}
我看到的错误是"应用程序处于断路模式"
我想你想要这个:
[StructLayout(LayoutKind.Explicit)]
public unsafe struct File_element
{
[FieldOffset(0)]
public int Line_no;
[FieldOffset(0)]
public fixed byte Line[128];
}
等于
union File_element
{
int Line_no;
char Line[128];
}
您可以像普通数组一样使用Line
字段:
unsafe
{
File_element f = new File_element();
f.Line_no = 0x060708;
Console.WriteLine(f.Line[0]); //8
Console.WriteLine(f.Line[1]); //7
Console.WriteLine(f.Line[2]); //6
}
您还可以添加一个属性以将Line
转换为字符串
public unsafe struct File_element
{
....
public string LineString
{
get
{
fixed (byte* p = Line)
return new string((sbyte*)p);
}
}
}
f.Line_no = 0x373635;
Console.WriteLine(f.LineString); //567
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组