我遇到了两个用于读取BLE传感器浮点值的解决方案。 memcpy方法很简单,也很有道理,但我遇到的另一种方法对我来说并不是很清楚。有人可以确切地说明指针投射方法是如何工作的吗?
// Represents data read from BLE device. Float value of 1.5
uint32_t data = 0x3fc00000;
float sensorValue;
// Memcpy method, makes sense and is straightforward
memcpy(&sensorValue, &data, sizeof(sensorValue));
// Works, but don't fully understand exactly how
sensorValue = *(float *)&data;
答案 0 :(得分:2)
& data是指向uint32_t的指针。因此,(float *)& data将其转换为指向float的指针。最后,*(float *)& data取消引用该指针。
你可以做同样的事情:
uint32_t *ui32 = &data
float *f = (float *) ui32;
sensorValue = *f;
但是,确切的行为可能与平台有关。