C++中含有union的stuct,如何在C#中定义

boblaw 2011-06-12 02:16:15

typedef struct tagMarket {
union {
WORD m_wMarket;
char m_EShortName[3];
};
char m_Name[16];
char m_CShortName[5];
unsigned long m_lProperty;
unsigned long m_lDate;
short m_PeriodCount;
short m_OpenTime[5];
short m_CloseTime[5];
short m_nCount;
StockInfo m_Siif[1];
} SCMarket;

请教,有如上一个C++中的Struct,包含一个union,如何在C#中定义?
...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhibin11 2011-06-12
  • 打赏
  • 举报
回复

unsafe struct tagMarket
{
public fixed sbyte m_EShortName[4];//这个字段代替union
public fixed sbyte m_Name[16];
public fixed sbyte m_CShortName[5];
public uint m_lProperty;
public uint m_lDate;
public short m_PeriodCount;
public fixed short m_OpenTime[5];
public fixed short m_CloseTime[5];
public short m_nCount;
public StockInfo m_Siif[1];
//下面的方法代替m_wMarket读写
public void writemarket(ushort market)
{
//////
}
public ushort getmarket()
{
///////
}
}

估计得写成这个样子,m_EShortName定义四个字节才能保证对齐。
x8bits 2011-06-12
  • 打赏
  • 举报
回复
想这样...
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)]
public struct MyUnion
{
[System.Runtime.InteropServices.FieldOffsetAttribute(0)]
public ushort m_wMarket;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=3, ArraySubType=System.Runtime.InteropServices.UnmanagedType.I1)]
[System.Runtime.InteropServices.FieldOffsetAttribute(0)]
public byte[] m_EShortName;
}
足球中国 2011-06-12
  • 打赏
  • 举报
回复
struct union
{
int m_wMarket;
[(3)]
byte[] m_EShortName;
}

当成struct 理论上应该是可以的。
用指针直接用byte然后再自己组装应该也可以。
hnfeitianwugui 2011-06-12
  • 打赏
  • 举报
回复
C#有union吗?
boblaw 2011-06-12
  • 打赏
  • 举报
回复
我问的是struct中包含union,如何定义

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧