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

时间:2017-02-08 14:58:02

标签: objective-c arrays nsdata int32

我一直在使用赛普拉斯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的每个索引并连接字节?任何帮助都可以,谢谢。

1 个答案:

答案 0 :(得分:0)

这样的事情不起作用吗?

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;