Tech Racho エンジニアの「?」を「!」に。
  • 開発

リトルエンディアンの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;
}

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

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


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。