ACE_OutputCDR를 사용하는데 Big endian 저장이되지 않는 현상을 발견했습니다.
아무리 옵션을 바꿔봐도 되지않아 찾아보니...
ACE 컴파일을 다시 해야하더군요.
$ACE_ROOT/ace/config.h 파일에 아래 내용을 추가한후 재컴파일하여 빌드하세요. #define ACE_ENABLE_SWAP_ON_WRITE 1 // enable swap byte_order테스트 코드
결과값
#include "ace/cdr_stream.h" #include "ace/log_msg.h" void OutputCDR_Test( ACE_CDR::UShort id, int endian ) { ACE_OutputCDR cdr( sizeof( id ), endian ); cdr << id; ACE_HEX_DUMP( ( LM_DEBUG, cdr.begin()->rd_ptr(), cdr.begin()->length() ) ); } int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { ACE_DEBUG( ( LM_DEBUG, ACE_TEXT("\nBYTE_ORDER_LITTLE_ENDIAN\n") ) ); OutputCDR_Test( 0x1234, ACE_CDR::BYTE_ORDER_LITTLE_ENDIAN ); ACE_DEBUG( ( LM_DEBUG, ACE_TEXT("\nBYTE_ORDER_BIG_ENDIAN\n") ) ); OutputCDR_Test( 0x1234, ACE_CDR::BYTE_ORDER_BIG_ENDIAN ); return 0; }
BYTE_ORDER_LITTLE_ENDIAN HEXDUMP 2 bytes 34 12 4. BYTE_ORDER_BIG_ENDIAN HEXDUMP 2 bytes 12 34 .4