エンディアンについてのメモ

ビッグエンディアンで記録されている数値を読み出す処理が、逆なんじゃないかと思ったら、実はx86はリトルエンディアンで記録しているということでした。本当にそうなっているのかC言語で確認しました。

#include <assert.h>
#include <stdint.h>
#include <string.h>
int main(void) {
  uint64_t x = 0x0123456789ABCDEFllu;
  uint32_t y[2];
  memcpy(y, &x, sizeof(uint64_t));
  assert(0x89ABCDEF == y[0]);
  assert(0x01234567 == y[1]);
  uint64_t z = ((uint64_t)y[1] << 32)| y[0];
  assert(x == z);
  return 0;
}