大小端以及取址方式
#include <stdio.h>
main()
{
int a = 0x12345678;
printf("a.addr = %p, a = %x\n", &a, *(&a));
printf("\n");
printf("a0.addr = %p, a0 = %x\n", ((char *)&a), (char)a);
printf("a0.addr = %p, a0 = %x\n", ((char *)&a), *((char *)&a));
printf("a1.addr = %p, a1 = %x\n", ((char *)&a + 1), *((char *)&a + 1));
printf("a2.addr = %p, a2 = %x\n", ((char *)&a + 2), *((char *)&a + 2));
printf("a3.addr = %p, a3 = %x\n", ((char *)&a + 3), *((char *)&a + 3));
printf("a4.addr = %p, a4 = %x\n", ((char *)&a - 4), *((char *)&a - 4));
}
/*
a.addr = 0x7fffb763173c, a = 12345678
a0.addr = 0x7fffb763173c, a0 = 78
a0.addr = 0x7fffb763173c, a0 = 78
a1.addr = 0x7fffb763173d, a1 = 56
a2.addr = 0x7fffb763173e, a2 = 34
a3.addr = 0x7fffb763173f, a3 = 12
a4.addr = 0x7fffb7631738, a4 = 0
*/
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
main()
{
uint32_t fff = 0x82fca8c0;
char *str = malloc(sizeof(uint32_t) + 1);
memcpy( str, (void *)&fff, sizeof(uint32_t) );
str[4] = '\n';
int i;
for (i = 0; i < 4; i++)
{
printf("%p - ",str);
printf("%x\n",(unsigned char)*str++);
}
}
/*
0x7b8010 - c0
0x7b8011 - a8
0x7b8012 - fc
0x7b8013 - 82
*/
/*
X86 cpu;gcc;linux kernel 3.0
取址是在小端地址,低位字节放在低位,因此是小端
*/