huang_jin_min 发表于 2009-12-12 20:28:55

如何禁止CDR类的字节对齐

参考文章: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::ULongul1=2;
cdr<<us1;
cdr<<ul1;
mb->wr_ptr(8);
#ifdefACE_ENABLE_SWAP_ON_WRITE
ACE_OS::printf("ACE_ENABLE_SWAP_ON_WRITE defined\n");
#endif
#ifdefACE_LACKS_CDR_ALIGNMENT
ACE_OS::printf("ACE_LACKS_CDR_ALIGNMENT defined\n");
#endif
char *a = new char;
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
0100bc0002000000


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

[ 本帖最后由 huang_jin_min 于 2009-12-12 20:34 编辑 ]

winston 发表于 2009-12-14 13:39:10

如果你不加,记得默认是8字节对齐的。
你可以不用CDR。

huang_jin_min 发表于 2009-12-14 16:12:42

是4字节的吧,听说CDR很强大,这么简单的功能应该有提供的吧,改天换个版本试试

newzai 发表于 2009-12-24 22:55:58

要重新编辑ACE库,设置几个宏吧。output和input的宏都要设置。

huang_jin_min 发表于 2010-1-12 15:50:12

换成5.6版的就可以,还真是奇怪。
页: [1]
查看完整版本: 如何禁止CDR类的字节对齐