【C++】エンディアン( バイトオーダ )を変換する関数
以前、ゲーム開発した時に使ったやつ。
コード
template <class T>
T ConvertEndian( const T VALUE )
{
const auto TYPE_SIZE = sizeof( T );
union
{
char bytes[TYPE_SIZE];
T value;
} converted;
const auto BYTES = reinterpret_cast<const char*>( &VALUE );
const auto MAX_INDEX = TYPE_SIZE - 1;
for ( size_t i = 0; i < TYPE_SIZE; i++ )
{
converted.bytes[MAX_INDEX - i] = BYTES[i];
}
return converted.value;
}
説明
各バイトの値を逆順に格納して返却しているだけ。
引数に指定した値のバイトの並びがリトルエンディアンであればビッグエンディアンに変換され、ビッグエンディアンであればリトルエンディアンに変換される。
参考書籍
リンク