如何禁止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 编辑 ] 如果你不加,记得默认是8字节对齐的。
你可以不用CDR。 是4字节的吧,听说CDR很强大,这么简单的功能应该有提供的吧,改天换个版本试试 要重新编辑ACE库,设置几个宏吧。output和input的宏都要设置。 换成5.6版的就可以,还真是奇怪。
页:
[1]