单片机强制类型转换与内存的关系

31 篇文章 4 订阅
    uint32_t f32data[2] = {0x87654321,0x5fedcba9};
    uint64_t f64data = *(uint64_t *)f32data;

    uint8_t  d0 = f64data & 0xFF;
    uint8_t  d1 = (f64data>>8) & 0xFF;
    uint8_t  d2 = (f64data>>16) & 0xFF;
    uint8_t  d3 = (f64data>>24) & 0xFF;
    uint8_t  d4 = (f64data>>32) & 0xFF;
    uint8_t  d5 = (f64data>>40) & 0xFF;
    uint8_t  d6 = (f64data>>48) & 0xFF;
    uint8_t  d7 = (f64data>>56) & 0xFF;

    u_print("d7:%x\r\n",d7);
    u_print("d6:%x\r\n",d6);
    u_print("d5:%x\r\n",d5);
    u_print("d4:%x\r\n",d4);
    u_print("d3:%x\r\n",d3);
    u_print("d2:%x\r\n",d2);
    u_print("d1:%x\r\n",d1);
    u_print("d0:%x\r\n",d0);

串口打印得结果:
在这里插入图片描述

uint32_t f32data[2] = {0x87654321,0x5fedcba9};
uint64_t f64data = *(uint64_t *)f32data;
所得结果:
f64data  = 0x5fedcba987654321;
因为	uint64_t 占用的内存是 uint32_t 的两倍。
原来首地址到结尾长度4字节,强制类型转换后首地址到结尾长度变为8字节。

举个例子

	uint8_t data[4] = {0x76,0x54,0x32,0x10};
    uint32_t data32 =  *(uint32_t *)data;
    
    // (uint32 *)  把指针 data 强制转换为了指向uint32_t类型得数据
	//	得到的就是:
    data32 = 0x10325476;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值