2017-02-08 28 views
0

私はCypress BLE PSoC 4200で作業していましたが、自分のiPhoneにデータパケットをint32送信するようにGATTデータベースを設定しました。ただし、uint8個のデータでGATTデータベースに書き込むことしかできません。 、uint32_t型の変数に4バイトのデータ(uint8_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電圧の読みを取り、uint8バイト配列にそれを置くために、次の書きました何らかの形でそれらを元の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の各指標を通過し、バイトを連結する方法はありますか?どんな助けでも、ありがとう。

+0

は... –

+0

' GetBytesメソッドをNSData' 'の' getBytes'方法を見てください。 –

答えて

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'に "転送"するだけだと思っていましたが、間違っていました。これはとてもうまく動作します、ありがとう! –

関連する問題