小端部の形状に機械側パターンとCPUデータのサイズを決定します

概念を初めて目

リトルエンディアン

低バイトがメモリのハイエンドメモリ、高いバイト・アドレス放電の終わりに低いアドレス放電であります

ビッグエンディアン

上位バイトは、ハイエンドメモリのメモリの終わりに低いアドレス放電と下位バイトのアドレス放電です。

実行中のC ++の間の第1の実施形態では、決定され、変換され

#include <アルゴリズム> // STD ::リバース

// 分析および変換が関数内で実行される 
テンプレート<型名T> 
T LittleEndianToNative(CONST T X){
     int型 endian_test = 1。;
     CHAR * p_endian_test =(CHAR *)&endian_test。
     IF(* == p_endian_test 1){ // リトルエンディアン
         // 直接戻る
        戻りXの; 
    }  { // ビッグエンディアンモード
         // 変換ビッグエンディアンとリトルエンディアンモードに 
        T data_reversed = X; 
        STD ::リバース(reinterpret_castは <CHAR *>(&data_reversed)、
                     reinterpret_castは < CHAR *>(&data_reversed)+ はsizeof (T))。
        返すdata_reversed; 
    } 
}

コンパイル時のチェックでは第二の方法、

マシンがリトルエンディアンモードであるか否かをチェック

#include <アルゴリズム> // STD ::リバース

インラインBOOL LittleEndianCheck(){ 
#ifdefのBOOST_BIG_ENDIAN 
    リターン falseにの#else 
    リターン trueに#endifの
} 

テンプレート <型名T> 
(T LittleEndianToNative CONST T X){
     IF(LittleEndianCheck()) { // リトルエンディアンモード、への直接リターン
        リターンX; 
    }  { // ビッグエンディアンモードでは、ビッグエンディアンモードは小端を変換する 
        T data_reversed = X; 
        STD ::リバース(reinterpret_castは < CHAR *>(&data_reversed)、
                     reinterpret_castは < CHAR *>(&data_reversed)+ はsizeof (T))。
        返すdata_reversed; 
    } 
}

おすすめ

転載: www.cnblogs.com/phillee/p/12077155.html