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;