2014-07-16 125 views
4

我是相當新的編程,我試圖開發一個使用iOS的CoreBluetooth藍牙健身設備。我從不同的硬件製造商那裏購買了大量不同的設備進行測試,並向設備發送價值指令之一轉換uint8_t和uint16_t到NSMutableData

我希望能夠爲藍牙健身設備編寫一個值(健身目標)。我知道如何讀/寫藍牙。

我只是不知道如何將我想要的值轉換爲uint8_t和uint16_t,然後將其組合成一個8字節的NSMutableData。

誰能告訴我怎麼做?

+0

NS(可變)數據只是一個字節數組的封裝形式。您需要將您的值轉換爲字節序列。 (你知道如何在C中使用shift和mask操作,對嗎?) –

+1

你應該。 Objective-C不適合初學者。你需要先學習C語言。 –

回答

8

首先要擔心的是字節排序。這對uint8_t無關緊要,但對於任何更大的事物都很重要。你可以有大端或小端。檢查設備的文檔。

開始與你的價值觀:以上

uint8_t days = 12; 
uint16_t walked = 225; 
uint16_t ran = 110 
uint16_t steps = 750; 
uint8_t users = 2; 

NSMutableData *data = [NSMutableData data]; 
[data appendBytes:&days length:1]; 
uint16_t network = CFSwapInt16HostToBig(walked); 
[data appendBytes:&network length:2]; 
network = CFSwapInt16HostToBig(ran); 
[data appendBytes:&network length:2]; 
network = CFSwapInt16HostToBig(steps); 
[data appendBytes:&network length:2]; 
[data appendBytes:&users length:1]; 

假設你需要在big-endian格式的數據。如果它需要小端,則將CFSwapInt16HostToBig更改爲CFSwapInt16HostToLittle

+0

非常感謝你rmaddy!這絕對有幫助。它正在向設備傳輸,除了走過的距離,跑步和步驟關閉之外。用戶和日子很好(uint8_t值)。它顯示走路的價值爲:025跑到:210和步驟:150.我猜這些訂單剛剛關閉。我嘗試了HostToLittle,但沒有運氣。還有其他建議嗎?再次感謝:) – Teddy13

+0

你用'HostToLittle'看到了什麼值? – rmaddy

+0

對於HostToLittle,走= 000,跑= 666,步= 130.謝謝! – Teddy13