如何将 4 个字节的数据 (uint8_t) 放入 uint32_t 类型的变量中

How to get 4 bytes of data (uint8_t) into a variable of type uint32_t

我一直在使用 Cypress BLE PSoC 4200,并且我已经设置了我的 GATT 数据库以将 int32 数据包发送到我的 iPhone。但是,您只能将 uint8 条数据写入 GATT 数据库。所以我写了以下内容来获取这个 int32 电压读数并将其放入 uint8 字节数组中:

    // function passes in int32 variable 'result'
    uint8 array[4];
    array[0] = result & 0xFF;
    array[1] = (result >> 8) & 0xFF;
    array[2] = (result >> 16) & 0xFF;
    array[3] = (result >> 24) & 0xFF;

所以,考虑到这一点,当那个 int32 数据包被发送时,我希望能够获取每个字节,并以某种方式将它们重新组合成原始的 int32 值,并将其打印到屏幕上(例如456000 将是 0.456 V)。

现在,我获得了 4 个字节并像这样处理它们:

    NSData* data = [characteristic value];
    const uint8_t *reportData = [data bytes];

    // variable to hold the eventual 32-bit data
    uint32_t voltage = 0;

有没有办法遍历 *reportData 的每个索引并连接字节?任何帮助都可以,谢谢。

这样的东西行不通吗?

uint32_t v0 = (uint32_t)reportData[0];
uint32_t v1 = (uint32_t)reportData[1] << 8;
uint32_t v2 = (uint32_t)reportData[2] << 16;
uint32_t v3 = (uint32_t)reportData[3] << 24;

uint32_t voltage = v0 | v1 | v2 | v3;