peakzhang 发表于 2007-12-28 23:38:55

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;
…..
};

peakzhang 发表于 2007-12-28 23:39:03

读取一个char,自己分解里面的标记。

ACE_CDR::Booleanread_char (ACE_CDR::Char &x)
页: [1]
查看完整版本: bif fields with ACE_CDR,有啥好方法?