これは物を視覚化するのに役立ちます。配列を作成するときは、2バイトが順番にあります。あなたがそれを印刷すると、それが格納されたリトルエンディアンの方法とは逆の、人間が読める16進値が得られます。 A0がA1よりも下位のアドレスです、次のようにuint16_tタイプが格納されているとして、リトルエンディアンの値1
は...
a0 a1
|10000000|00000000
注意、最下位バイトが最初であるが、我々は六角でそれを価値を印刷するとき右端に最下位バイトが表示されます。これは、通常どんなマシンでも期待されています。
このプログラムは、少なくともからリトルエンディアンとバイナリの出発で、ビッグエンディアン1
上位バイトを出力します...
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
void print_bin(uint64_t num, size_t bytes) {
int i = 0;
for(i = bytes * 8; i > 0; i--) {
(i % 8 == 0) ? printf("|") : 1;
(num & 1) ? printf("1") : printf("0");
num >>= 1;
}
printf("\n");
}
int main(void) {
uint8_t a[2] = {0x15, 0xaa};
uint16_t b = *(uint16_t*)a;
uint16_t le = 1;
uint16_t be = htons(le);
printf("Little Endian 1\n");
print_bin(le, 2);
printf("Big Endian 1 on little endian machine\n");
print_bin(be, 2);
printf("0xaa15 as little endian\n");
print_bin(b, 2);
return 0;
}
これが出力されます(これは最下位バイトが最初である)
Little Endian 1
|10000000|00000000
Big Endian 1 on little endian machine
|00000000|10000000
0xaa15 as little endian
|10101000|01010101
これは[エンディアン](https://en.wikipedia.org/wiki/Endianness)によるものです。あなたはキャスティングでそれを解決することはできません:shift-and-add(または)は良いです。 –
http://stackoverflow.com/questions/22030657/little-endian-vs-big-endian – fukanchik