找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5579|回复: 4

如何禁止CDR类的字节对齐

[复制链接]
发表于 2009-12-12 20:28:55 | 显示全部楼层 |阅读模式
参考文章:http://www.devxx.com/2009/07/557.html
网上参考了一些文章,说是在config.h文件中再添加一行:

#define ACE_LACKS_CDR_ALIGNMENT  

但是我添加了还是没有用
int main()
{
ACE_Message_Block *mb =  new ACE_Message_Block (100);
ACE_OutputCDR cdr(mb,1);
ACE_CDR::UShort us1=1;
ACE_CDR::ULong  ul1=2;
cdr<<us1;
cdr<<ul1;
mb->wr_ptr(8);
#ifdef  ACE_ENABLE_SWAP_ON_WRITE
ACE_OS::printf("ACE_ENABLE_SWAP_ON_WRITE defined\n");
#endif
#ifdef  ACE_LACKS_CDR_ALIGNMENT
ACE_OS::printf("ACE_LACKS_CDR_ALIGNMENT defined\n");
#endif
char *a = new char[100];
for(int i=0;i<100;i++)
  a=0;
cdr.write_char_array(a,100);

ACE_OS::memcpy(a,mb->rd_ptr(),mb->length());
for(int i=0;i<mb->length();i++)
  ACE_OS::printf("%02x  ",(unsigned char)a);
}

输出:
ACE_ENABLE_SWAP_ON_WRITE defined
ACE_LACKS_CDR_ALIGNMENT defined
01  00  bc  00  02  00  00  00  


为什么这里还是4字节对齐的?我的ace是5.5版的

[ 本帖最后由 huang_jin_min 于 2009-12-12 20:34 编辑 ]
发表于 2009-12-14 13:39:10 | 显示全部楼层
如果你不加,记得默认是8字节对齐的。
你可以不用CDR。
 楼主| 发表于 2009-12-14 16:12:42 | 显示全部楼层
是4字节的吧,听说CDR很强大,这么简单的功能应该有提供的吧,改天换个版本试试
发表于 2009-12-24 22:55:58 | 显示全部楼层
要重新编辑ACE库,设置几个宏吧。output和input的宏都要设置。
 楼主| 发表于 2010-1-12 15:50:12 | 显示全部楼层
换成5.6版的就可以,还真是奇怪。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-4 01:50 , Processed in 0.032772 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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