9.2 エンディアンを変換 (big ⇔ little) する関数テンプレート

単純にバイト単位で順序を入れ替える関数テンプレートです。CHAR_BIT の値には依存しません。

template<class T>
T reverse_endian(T value)
{
  char * first = reinterpret_cast<char*>(&value);
  char* last = first + sizeof(T);
  std::reverse(first, last);
  return value;
}

エンディアンを反転した場合、詰め物ビットの位置が上位⇔下位に入れ替わるような場合には対応していません。また、型 T はスカラ型でなければなりません。


元ネタ
このエントリーを含むはてなブックマーク