c - memcpy vs 用于读取 BLE 传感器 float 的指针转换

标签 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;

最佳答案

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

你可以做同样的事情:

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

但是,确切的行为可能取决于平台。

关于c - memcpy vs 用于读取 BLE 传感器 float 的指针转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185972/

相关文章:

c - merge_sort 不起作用,输出只是一堆 1 -1 和 0

c - 如何确定字符串长度?

c - 我怎样才能一次释放所有分配的内存?

c -++ 指针运算符

通过 memcpy 将数据从用户应用程序复制到内核驱动程序

c++ - OpenCV cv::Mat to short*(避免 memcpy)

c - 如何使用 sscanf() 解析这行文本?

c - 如何使用 GETOPT 在每个命令行选项后获取指向每个参数的指针

c - 为什么 inet_ntoa 在这段代码中返回 0.0.0.0 ?

c - 如何在C中模拟输出参数