从整数数组中提取浮点数

Extract float numbers from integer array

我有一个整数数组,我知道其中的前 4 个字节是一个浮点数,第二个 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 数组第一个位置的浮动指针的强制转换?为什么我需要添加“*”?

当你写 (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