C#如何实现C++中的联合体union

RFbenson 2010-08-15 05:58:13
	union {
uint32 u32value;
struct {
uint32 isDead : 1; // [0,1] physical, Magic
uint32 inCombat : 1;
uint32 justRevived : 1;
uint32 isLoaded : 1;
uint32 _pad : 28;
};
} m_statusFlags;


C#里面是否有什么bitmask之类的类型,可以设置数据的位。

谢谢
...全文
445 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
RFbenson 2010-08-18
  • 打赏
  • 举报
回复
网上查了下,是将c++做成一个dll,但是,我这边全是类。。不行~
RFbenson 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 caozhy 的回复:]

引用 6 楼 jointan 的回复:
他的Struct是要取UINT32的位的,StructLayout肯定不行,因为它只能控制到字节,

就放一个UINT32进去就可以了,

取值时_pad的值等于(u32value & 0xFFFFFFF0)>>4;

那就将用到的类用C++或者IL来写,再编译到一起。
[/Quote]


我的类是用C++ 写好的,怎么将它们编译到一起,要是能直接用C++, 就太好了~不用移植了。
threenewbee 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jointan 的回复:]
他的Struct是要取UINT32的位的,StructLayout肯定不行,因为它只能控制到字节,

就放一个UINT32进去就可以了,

取值时_pad的值等于(u32value & 0xFFFFFFF0)>>4;
[/Quote]
那就将用到的类用C++或者IL来写,再编译到一起。
jointan 2010-08-15
  • 打赏
  • 举报
回复
他的Struct是要取UINT32的位的,StructLayout肯定不行,因为它只能控制到字节,

就放一个UINT32进去就可以了,

取值时_pad的值等于(u32value & 0xFFFFFFF0)>>4;
threenewbee 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gomoku 的回复:]
[StructLayout(LayoutKind.Explicit)]
class A
{
[FieldOffset(0)]
public uint u32Value;

[FieldOffset(0)]
public MyStruct something;
}
[/Quote]

正解。
thoughter 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 baesky 的回复:]

楼上的貌似正确。。。学习了
[/Quote]
如果都是值类型的话或许可以,否则可能编译通不过,而且
[System.Runtime.InteropServices.FieldOffset(0)]
public double d;

[System.Runtime.InteropServices.FieldOffset(0)]
public float f1;
[System.Runtime.InteropServices.FieldOffset(32)]
public float f2;
类似这样的话,f2似乎不能正确赋值(以前试过好像是这样)
参见:如何实现类似于c语言中的共用体
Baesky 2010-08-15
  • 打赏
  • 举报
回复
楼上的貌似正确。。。学习了
jointan 2010-08-15
  • 打赏
  • 举报
回复
这个东西只能用掩码的&运算进行取值了,直接传个UINT32就行了
gomoku 2010-08-15
  • 打赏
  • 举报
回复
[StructLayout(LayoutKind.Explicit)]
class A
{
[FieldOffset(0)]
public uint u32Value;

[FieldOffset(0)]
public MyStruct something;
}

110,541

社区成员

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

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

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