大小端以及取址方式

大小端以及取址方式
#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
  取址是在小端地址,低位字节放在低位,因此是小端
*/
posted @ 2012-11-15 18:31  静心小阁  阅读(402)  评论(0编辑  收藏  举报