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