C言語におけるエンディアンの変換と実装
C言語においてエンディアン変換を実装する方法は、以下のようになります:
- unionを使用して変換を行う。
#include <stdio.h>
union endian_converter {
int i;
char c[sizeof(int)];
};
int main() {
union endian_converter converter;
converter.i = 1;
if(converter.c[0] == 1)
printf("Little endian\n");
else
printf("Big endian\n");
return 0;
}
この例では、整数1を整数型の共用体に保存し、共用体のキャラクター配列メンバーを使用して保存されたバイト順序を確認します。最初のバイトが1の場合、リトルエンディアンとして保存されていることを示し、そうでない場合はビッグエンディアンであると表します。
- ビット演算で変換する:
#include <stdio.h>
int main() {
unsigned int num = 1;
char *ptr = (char*)#
if(*ptr == 1)
printf("Little endian\n");
else
printf("Big endian\n");
return 0;
}
この例では、整数1のアドレスを文字ポインタに変換し、ポインタが指すバイトの値を判断してバイト順序を決定します。最初のバイトが1の場合、リトルエンディアンバイト順序として保存されていることを示し、そうでない場合はビッグエンディアンバイト順序として保存されていることを示します。
これらの2つの方法は、異なるマシンでエンディアン(バイトオーダー)を判断することができますが、第1の方法は共用体を使用しており、第2の方法はポインタを直接操作しているため、より一般的かもしれません。