这可能有助于可视化事物。 创建数组时,按顺序有两个字节。 当您打印它时,您将获得人类可读的十六进制值,这与存储它的小端方式相反。 作为uint16_t类型的小端的值1存储如下,其中a0是低于a1的地址...
a0 a1
|10000000|00000000
注意,最低有效字节是第一个,但是当我们以十六进制打印它时,右边出现最低有效字节,这是我们通常在任何机器上所期望的。
这个程序从最低有效字节开始以二进制打印一个小端和大端1 ...
#include
#include
#include
#include
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