大小端以及取址方式 #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
取址是在小端地址,低位字节放在低位,因此是小端
*/
转载于:https://www.cnblogs.com/sqmlinux/archive/2012/11/15/2772055.html