大小端以及取址方式

大小端以及取址方式
#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值