memcpy vs指针用于读取BLE传感器浮点数

时间:2016-03-23 18:26:22

标签: c pointers memcpy bluetooth-lowenergy

我遇到了两个用于读取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;

1 个答案:

答案 0 :(得分:2)

& data是指向uint32_t的指针。因此,(float *)& data将其转换为指向float的指针。最后,*(float *)& data取消引用该指针。

你可以做同样的事情:

uint32_t *ui32 = &data
float *f = (float *) ui32;
sensorValue = *f;

但是,确切的行为可能与平台有关。