/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 Mathieu Malaterre All rights reserved. See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #include "gdcmTypes.h" #include "gdcmSwapCode.h" #include "gdcmByteSwap.h" #include // memcpy int myfunc() { char vl_str[4]; const char raw[] = "\000\000\000\004"; memcpy(vl_str, raw, 4); uint32_t vl; gdcm::ByteSwap::SwapRangeFromSwapCodeIntoSystem((uint32_t*)(&vl_str), gdcm::SwapCode::BigEndian, 1); memcpy(&vl, vl_str, 4); if( vl != 0x00000004 ) { std::cerr << std::hex << "vl: " << vl << std::endl; return 1; } gdcm::ByteSwap::SwapFromSwapCodeIntoSystem(vl, gdcm::SwapCode::LittleEndian); if( vl != 0x00000004 ) { std::cerr << std::hex << "vl: " << vl << std::endl; return 1; } gdcm::ByteSwap::SwapFromSwapCodeIntoSystem(vl, gdcm::SwapCode::BigEndian); if( vl != 0x4000000 ) { std::cerr << std::hex << "vl: " << vl << std::endl; return 1; } return 0; } int TestByteSwap(int , char *[]) { gdcm::SwapCode sc = gdcm::SwapCode::Unknown; if ( gdcm::ByteSwap::SystemIsBigEndian() ) { sc = gdcm::SwapCode::BigEndian; } else if ( gdcm::ByteSwap::SystemIsLittleEndian() ) { sc = gdcm::SwapCode::LittleEndian; } if( sc == gdcm::SwapCode::Unknown ) { std::cerr << "unk" << std::endl; return 1; } //std::cout << "sc: " << sc << std::endl; uint16_t t = 0x1234; gdcm::ByteSwap::SwapFromSwapCodeIntoSystem(t, sc); if( sc == gdcm::SwapCode::BigEndian ) { if( t != 0x3412 ) { std::cerr << std::hex << "t: " << t << std::endl; return 1; } // ok test pass rest value to old one t = 0x1234; } else if ( sc == gdcm::SwapCode::LittleEndian ) { if( t != 0x1234 ) { std::cerr << std::hex << "t: " << t << std::endl; return 1; } } union { char n[2]; uint16_t tn; } u16; memcpy(u16.n, &t, 2 ); gdcm::ByteSwap::SwapRangeFromSwapCodeIntoSystem(&u16.tn, sc, 1); uint16_t tn = u16.tn; if( sc == gdcm::SwapCode::BigEndian ) { if( tn != 0x3412 ) { std::cerr << std::hex << "tn: " << tn << std::endl; return 1; } // ok test pass rest value to old one t = 0x1234; } else if ( sc == gdcm::SwapCode::LittleEndian ) { if( tn != 0x1234 ) { std::cerr << std::hex << "tn: " << tn << std::endl; return 1; } } gdcm::ByteSwap::SwapRangeFromSwapCodeIntoSystem(&u16.tn, gdcm::SwapCode::BigEndian, 1); tn = u16.tn; if( sc == gdcm::SwapCode::LittleEndian ) { if( tn != 0x3412 ) { std::cerr << std::hex << "tn: " << tn << std::endl; return 1; } } else if ( sc == gdcm::SwapCode::BigEndian ) { if( tn != 0x1234 ) { std::cerr << std::hex << "tn: " << tn << std::endl; return 1; } } if( myfunc() ) { return 1; } uint16_t array[] = { 0x1234 }; gdcm::ByteSwap::SwapRangeFromSwapCodeIntoSystem(array, gdcm::SwapCode::BigEndian,1); if ( array[0] != 0x3412 ) { std::cerr << std::hex << "array: " << array[0] << std::endl; return 1; } return 0; }