2008年6月19日木曜日

エンディアン

エンディアンネス (endianness)
バイトオーダ (byte order)

0x1234ABCD という4バイトのデータ

ビッグエンディアン:
データの上位バイトからメモリに「12 34 AB CD」と並べる方式

リトルエンディアン:
データの下位バイトから「CD AB 34 12」と並べる方式

http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3

#include <stdio.h>

#define SWAP32(a) ((((a) & 0xff000000) >> 24) | (((a) & 0x000000ff) << 24) | \
(((a) & 0x00ff0000) >> 8) | (((a) & 0x0000ff00) << 8))

int main()
{
unsigned int indata;
unsigned int outdata;

while(1) {
printf("data(hex) = "); scanf("%x", &indata);

if(indata == 0xffffffff) { break; }

outdata = SWAP32(indata);

printf("swap = 0x%08X\n", outdata);
}

return 0;
}



0 件のコメント:

コメントを投稿