【C++】エンディアン( バイトオーダ )を変換する関数

2018年10月19日
CPP

以前、ゲーム開発した時に使ったやつ。

コード

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;
}

説明

各バイトの値を逆順に格納して返却しているだけ。

引数に指定した値のバイトの並びがリトルエンディアンであればビッグエンディアンに変換され、ビッグエンディアンであればリトルエンディアンに変換される。

参考