キノコの自省録

日々適当クリエイト

バイトオーダーを入れ替える関数

http://d.hatena.ne.jp/kinokorori/20071017/1192625754
ここで2007年という大昔にswapByteOrderなる関数をさらしましたが、
リンク切れていたので、ここに直接べた書きします。

template<typename T>
static T swapByteOrder(T orig)
{
	T temp = 0;
	unsigned char* p = reinterpret_cast<unsigned char*>(&temp);
	for (unsigned i = 0; i < sizeof(T); ++i) {
		p[sizeof(T) - (i + 1)] = static_cast<unsigned char>(orig >> (i << 3));
	}
	return temp;
}


良いか悪いかは別にして、値渡しができて、
T temp = 0;が通るものは全てバイトオーダーをひっくり返します。
なお、ポインタを渡すとポインタアドレスをひっくり返すので注意してください。
また、元記事ではBOOSTがどうのと書いてますが、該当箇所は都合により削除しました。


ちなみにこれは、「C++テンプレートメタプログラミングは、sizeofと相性が良い」
ことを確かめるために作成したものです。