从整数数组中提取浮点数
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
我有一个整数数组,我知道其中的前 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