プログラミングの記録

Who Wrote Holden Caulfield?

エンディアンネス (エンディアン)。バイトオーダ (バイト順)。macOSはリトルエンディアンかビッグエンディアンか (C言語, Makefile)

概要

上位バイト・下位バイトの順序を俗にエンディアンネス (エンディアン) という。

メモリの若い番地が下位バイトであるのを little-endian という。

その逆が、big-endian という。

そこで、当ブログ筆者所有の macOS ではどうかをC言語で調べてみた。

C コード

endianness.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int i = 1;

    if (*((char *)&i)) {
        printf("little-endian\n");
    } else if (*(char *)&i + (sizeof(int) - 1)) {
        printf("big-endian\n");
    } else {
        printf("このプログラムの対象外です。\n");
    }

    return 0;
}

Makefile.endianness

(なお、makefile のインデントは、tab を使用するのが原則的。コピペ注意)。

PROGRAM   =     endianness
OBJS      =     endianness.o
SRCS      =     $(OBJS:%.o=%.c)
CC        =     gcc
CFLAGS    =     -g -Wall
LDFLAGS   =

$(PROGRAM):$(OBJS)
    $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LDLIBS)

出力

$ make -f Makefile.endianness
gcc -g -Wall  -o endianness endianness.o 
$ ./endianness
little-endian

筆者の macOS は、little-endian であるということがこれでわかった。

(ここまで、さも未知のことであるかのように書いたが、

これは多くの Geek たちにとっては既知のことだろう)。

参考文献

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

新版はこちら:

[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

広告を非表示にする