マシンサイズエンドバイトシーケンスをテストするウィジェット
1174 ワード
現代機器のバイト順組織には、大端順組織(big endian)と小端順組織(little endian)の2つの方法があり、典型的なIntel 80 x 86 CPUはlittle endianを使用しているが、アップルMacintoshと80 x 86以外の多くのシステムはbig endianを使用している.
この2つの名前はJonathan Swiftの作品「ガリバー旅行記」(Gulliver's Travels)に由来し、小人国の住民たちは卵が大きな端から開くべきか小さい端から開くべきかを言い争い、その後、コンピュータのバイト順組織もこの呼び方を踏襲した.
little endianについての説明:「Little Endian」means that the low-order byte of the number is stored in memory at the lowest address,and the high-order byte at the highest address.
big endianについての説明:「Big Endian」means that the high-order byte of the number is stored in memory at the lowest address,and the low-order byte at the highest address.
次に、マシンサイズのエンドバイトシーケンスをテストするコードを示します.
この2つの名前はJonathan Swiftの作品「ガリバー旅行記」(Gulliver's Travels)に由来し、小人国の住民たちは卵が大きな端から開くべきか小さい端から開くべきかを言い争い、その後、コンピュータのバイト順組織もこの呼び方を踏襲した.
little endianについての説明:「Little Endian」means that the low-order byte of the number is stored in memory at the lowest address,and the high-order byte at the highest address.
big endianについての説明:「Big Endian」means that the high-order byte of the number is stored in memory at the lowest address,and the low-order byte at the highest address.
次に、マシンサイズのエンドバイトシーケンスをテストするコードを示します.
#include<stdio.h>
union{
unsigned long bits32;
unsigned char bytes[4];
}value;
int isLittleEndian(){
value.bytes[0] = 0;
value.bytes[1] = 1;
value.bytes[2] = 0;
value.bytes[3] = 0;
return value.bits32 == 256;
}
int main(){
if( isLittleEndian())
printf("is little endian! ");
else
printf("is big endian! ");
return 0;
}