試す一試みる テンプレートを <型名T> T transformBigToLittleEndian(CONST T&BiValue) { 符号なしショート sizeCount = はsizeof (T)。 T liValue; もし(sizeCountの== 2 ) { liValue =((BiValue&は0xFF00)>> 8 ) |((BiValue&0x00FFに)<< 8 )。 } そう であれば(sizeCountの== 4 ) { liValue =((BiValue&0xFF000000)>> 24 ) | ((BiValue&0x00FF0000)>> 8 ) | ((BiValue&0x0000FF00)<< 8 ) | ((BiValue&0x000000FF)<< 24 )。 } そう であれば(sizeCountの== 8 ) { liValue =((BiValue&0xFF00000000000000)>> 56 ) | ((BiValue&0x00FF000000000000)>> 40 ) | ((BiValue&0x0000FF0000000000)>> 24 ) | ((BiValue&0x000000FF00000000)>> 8 ) | ((BiValue&0x00000000FF000000)<< 8 ) | ((BiValue&0x0000000000FF0000)<< 24 ) | ((BiValue&0x000000000000FF00)<< 40 ) | ((BiValue&0x00000000000000FF)<< 56 )。 } 戻りliValue。 } テンプレート <型名T> T transformLittleToBigEndian(CONST T& 符号なしの短い sizeCount = はsizeof (T)。 T BiValue; もし(sizeCountの== 2 ) { BiValue | =((liValue&0x00FFに)<< 8 )。 BiValue | =((liValue&は0xFF00)>> 8 ); } そう であれば(sizeCountの== 4 ) { BiValue =((liValue&0x000000FF)<< 24 ) | ((liValue&0x0000FF00)<< 8) | ((liValue&0x00FF0000)>> 8 ) | ((liValue&0xFF000000)>> 24 )。 } そう であれば(sizeCountの== 8 ) { BiValue | =((liValue&0x00000000000000FF)<< 56 )。 BiValue | =((liValue&0x000000000000FF00)<< 40 ); BiValue | =((liValue&0x0000000000FF0000)<< 24 ); BiValue | =((liValue&)<<8 )。 BiValue | =((liValue&0x000000FF00000000)>> 8 ); BiValue | =((liValue&0x0000FF0000000000)>> 24 ); BiValue | =((liValue&0x00FF000000000000)>> 40 ); BiValue | =((liValue&0xFF00000000000000)>> 56 ); } 戻りBiValueと、 }
メインINT()
{
transformBigToLittleEndian();
int値= 1;
値= transformLittleToBigEndian(値);
COUT << "値=小端BIA =に大きい端をINT" <<値<< ENDL。
= transformBigToLittleEndian値(値);
COUT <<値<< << ENDL「次に及び小端値=に大きい端から変換されました」;
}
どのように判断するために、自分のコンピュータの記憶メモリがビッグエンディアンかリトルエンディアンストレージです:https://www.cnblogs.com/azbane/p/11303463.html