bif fields with ACE_CDR,有啥好方法?
不知道如何用 ACE_OutputCDR and ACE_InputCDR 来实现bit fields 的读写,不知道各位游啥好办法?For example:
struct CTest{
#ifdefACE_BIG_ENDIAN
ACE_Byte nFlag : 1;
ACE_Byte nProtocol : 4;
ACE_Byte nRemain : 3;
#else
ACE_Byte nRemain : 3;
ACE_Byte nProtocol : 4;
ACE_Byte nFlag : 1;
#endif
ACE_CDR::Long nBodyLength;
……
};
Now I have 2 choices:
1. CTest* p = (CTest*)buf. 不用ACE_CDR.
2. 用union,再用ACE_CDR 实现 write_char (ACE_OutputCDR), read_char (ACE_InputCDR). 但是好像太冗长。
struct CUnionTest1{
#ifdefACE_BIG_ENDIAN
ACE_Byte nFlag : 1;
ACE_Byte nProtocol : 4;
ACE_Byte nRemain : 3;
#else
ACE_Byte nRemain : 3;
ACE_Byte nProtocol : 4;
ACE_Byte nFlag : 1;
#endif
};
struct CTest{
union{
CUnionTest1 nUnion1;
ACE_Byte nUnionFake1;
};
ACE_CDR::Long nBodyLength;
…..
};
读取一个char,自己分解里面的标记。
ACE_CDR::Booleanread_char (ACE_CDR::Char &x)
页:
[1]