リトルエンディアンのunsigned intをビックエンディアンにする。

iOSやAndroidなどは、ビックエンディアン環境のため、
リトルエンディアンでファイルなどに保存されているunsigned intの値がそのままだと使えないです。
そのため、リトルエンディアンのunsigned intをビックエンディアンにひっくり返すためのコードです。

unsigned int BGHostEndianIntegerFromLittleEndianInteger(unsigned int n) {
#ifdef __BIG_ENDIAN__
    printf("%08x", n);
    unsigned int ret = (n << 24) & 0xFF000000;
    ret |= (n << 8) & 0x00FF0000;
    ret |= (n >> 8) & 0x0000FF00;
    ret |= (n >> 24) & 0x000000FF;
    printf("%08x", ret);
    return ret;
#endif
    return n;
}

もしかしたら、もっと良い書き方があるかもしれません。皆さんはどうやっていますでしょうか。

ごめんなさい、初掲の際ミドルエンディアンにしてしまっていました。修正しました

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ