2017-02-08 4 views
0

Я работал с Cypress BLE PSoC 4200, и я настроил свою базу данных GATT для отправки пакетов данных int32 на мой iPhone. Однако вы можете записывать только в базу данных GATT с данными uint8. Поэтому я написал следующее принять этот int32 показания напряжения и поместить его в массиве uint8 байт:Как получить 4 байта данных (uint8_t) в переменную типа uint32_t

// 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 В).

Прямо сейчас, я получаю 4 байта и обрабатывать их, как например:

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

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

Есть ли способ, чтобы пройти через каждый индекс *reportData и сцепить байты? Любая помощь поможет, спасибо.

+0

Посмотрите на 'метод getBytes' из' NSData' ... –

+0

'GetBytes: длина:' метод отлично работает, спасибо Martin. –

ответ

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; 
+0

Сначала я думал, что приведение 'uint32_t' будет только« передавать »адрес' v0', но я ошибся. Это работает очень хорошо, спасибо! –