找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3427|回复: 1

bif fields with ACE_CDR,有啥好方法?

[复制链接]
发表于 2007-12-28 23:38:55 | 显示全部楼层 |阅读模式
不知道如何用 ACE_OutputCDR and ACE_InputCDR 来实现bit fields 的读写,不知道各位游啥好办法?

For example:
  1. struct CTest{
  2. #ifdef  ACE_BIG_ENDIAN
  3. ACE_Byte nFlag : 1;
  4. ACE_Byte nProtocol : 4;
  5. ACE_Byte nRemain : 3;
  6. #else
  7. ACE_Byte nRemain : 3;
  8. ACE_Byte nProtocol : 4;
  9. ACE_Byte nFlag : 1;
  10. #endif
  11. ACE_CDR::Long nBodyLength;
  12. ……
  13. };
复制代码
Now I have 2 choices:
1.      CTest* p = (CTest*)buf. 不用ACE_CDR.
2.      用union,再用ACE_CDR 实现 write_char (ACE_OutputCDR), read_char (ACE_InputCDR). 但是好像太冗长。
  1. struct CUnionTest1{
  2. #ifdef  ACE_BIG_ENDIAN
  3. ACE_Byte nFlag : 1;
  4. ACE_Byte nProtocol : 4;
  5. ACE_Byte nRemain : 3;
  6. #else
  7. ACE_Byte nRemain : 3;
  8. ACE_Byte nProtocol : 4;
  9. ACE_Byte nFlag : 1;
  10. #endif
  11. };
  12. struct CTest{
  13. union{
  14. CUnionTest1 nUnion1;
  15. ACE_Byte nUnionFake1;
  16. };
  17. ACE_CDR::Long nBodyLength;
  18. …..
  19. };
复制代码
 楼主| 发表于 2007-12-28 23:39:03 | 显示全部楼层
读取一个char,自己分解里面的标记。

ACE_CDR::Boolean  read_char (ACE_CDR::Char &x)
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 07:17 , Processed in 0.014605 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表