ACE学习手记 -----关于 ACE_CDR

本文介绍了ACE_CDR在编译时涉及的四个关键宏,包括ACE_CDR_IGNORE_ALIGNMENT、ACE_DISABLE_SWAP_ON_READ、ACE_LACKS_CDR_ALIGNMENT和ACE_ENABLE_SWAP_ON_WRITE。这些宏分别控制输入输出流的字节对齐和字节序转换。正确配置这些宏对于在网络通信中处理字节序和字节对齐至关重要,尤其是在BIG和LITTLE字节序的混合环境中。了解并掌握这些宏的用法,能够帮助开发者更好地实现跨平台的网络数据交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ACD_CDR编译时的4个宏、下面4个宏在ACE编译时默认都是关闭的。
如果要让自己的ACE库有相关的能力需要在config.h中定义以下宏

ACE_InputCDR 相关的宏
 ACE_CDR_IGNORE_ALIGNMENT
 该宏让CDR Stream忽略输入流的字节对其,全部按单字节对其。
 如果没有设置该宏,ACE采用8个字节对输入流进行默认对其。
 
 ACE_DISABLE_SWAP_ON_READ
 
 该宏静止把输入流赋值给多字节数据变量(2、4、8)时静止高低字节序的交换。
 默认情况下该宏关闭、也就是ACE_InputCDR会对字节序进行交换。
 一般情况下我们不需要定义该宏、除非我们的系统中所有的网络设备都是同一个字节体系的。否则必须关闭该宏。
 
 
ACE_OutputCDR 相关的宏
 ACE_LACKS_CDR_ALIGNMENT 
 该宏打开后、忽略把多字节数据写入输出流时忽略字节对其、而是采用单字节对其的方式写入。
 默认ACE关闭该宏、此时ACE在写入时会根据写入数据的字节自动调整。也就是写入Short、Int等类型时
 起始地址调整为 sizeof( datatype) 的整数倍数。即 startWriteAddre % sizeof( DataType) == 0 
 ACE_ENABLE_SWAP_ON_WRITE
 该宏打开在写入多字节数据类型时,自动进行字节序的交换。
 
 关于字节序交换的问题:
 1) ACE_InputCDR 、ACE_OutputCDR 何时会对读取或者写入的多字节数据进行字节序交换呢?
   ACE_InputCDR 宏ACE_DISABLE_SWAP_ON_READ关闭时,而且其byte_order与本机的字节序不一致时.
   ACE_OutputCDR 宏打开释,而且ACE_OutputCDR对象的byte_order

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值