我有一段代码试图从旧的 qt 文件转换为 C#,但我有点不清楚下面的 union 中的结构中发生了什么。我不确定“:”是做什么的...我猜它设置了大小但找不到任何关于此的文档。此外,由于 C# 没有 union ,转换此类内容的最佳做法是什么。谢谢
union uAWord
{
uAWord()
: m_AWord(0) {}
struct sBcdAWord
{
quint32 m_O :8;
quint32 m_S :2;
quint32 m_D :18;
quint32 m_SS :3;
quint32 m_P :1;
}
sBcdAWord m_F;
quint32 m_AWord;
}
最佳答案
这就是所谓的位域。 sBcdWord 部分是一个 32 位的字,每个字段是该字的一部分,分别占 8,2,18,3,1 BIT: 所以word排版如下:
- Bit0-Bit7 m_0
- Bit8-Bit9 m_S
- Bit10-Bit27 m_D
- Bit28-Bit30 m_ss
- Bit31 m_P
如何在 C# 中移植此代码取决于您是否正在移植代码,或者您是否需要 PInvoke。对于 PInvoke,最好的解决方案可能是将 sBcdAWord 映射为 Unit32,并创建一些访问器策略来屏蔽读写。如果是代码移植,除非有特殊的内存使用节省需求,否则使用分离属性会很好。
关于c# - qt 到 c# : operator mean within struct 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304635/