我有一个整数数组,其中,我知道前4个字节是浮点数,secon 4个字节是另一个浮点数等等;提取浮点数我使用这样的浮点指针:
uint8_t l_buffer[17];
float32 num1 = *(float*)&(l_buffer);
float32 num2 = *(float*)&(l_buffer[4]);
并且一切都很完美,但我不明白为什么!!!!事实上,我尝试使用没有'*'的指针:
float32 num1 = (float*)&(l_buffer);
float32 num2 = (float*)&(l_buffer[4]);
但它不起作用。对不起,但是(float *)&(l_buffer)不是强制指向l_buffer数组第一个位置的浮动指针?为什么我需要添加'*'?
答案 0 :(得分:0)
当你写(float*)(anystuff)
时,你有一个浮动指针。
所以是的(float*)&(l_buffer)
是对浮点指针的强制转换为数组的第一个位置。
但是没有从float指针到float的显式转换,所以这不起作用:
float num1 = (float*)&(l_buffer); // error (float*) is not (float)
但是你可以想要像float f = *(pFloatPointer)
一样读取指向的值,这就是为什么这样可行:
float num1 = *(float*)&(l_buffer); // ok *(float*) is a (float)
同时转换为float*
为您提供索引设施:
float f1 = *(float*)&(l_buffer[4]); // 4th element of a uint8_t array
float f2 = ((float*)l_buffer)[1]; // 1th element of a float array
// So f1 == f2