将uint8_t和uint16_t转换为NSMutableData

时间:2014-07-16 01:11:18

标签: ios objective-c c

我对编程很新,我正在尝试使用CoreBluetooth for iOS开发蓝牙健身设备。我从不同的硬件制造商处购买了一堆不同的设备进行测试,并向设备发送了一条指令

我希望能够为蓝牙健身设备写一个值(健身目标)。我知道如何使用蓝牙进行读/写。

我只是不知道如何将我想要的值转换为uint8_t和uint16_t,然后将其组合成一个8字节的NSMutableData。

谁能告诉我怎么做?

1 个答案:

答案 0 :(得分:8)

首先要担心的是字节排序。它对uint8_t并不重要,但对于任何更大的事情都很重要。你可以有big-endian或little-endian。检查设备的文档。

从您的值开始:

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格式的数据。如果需要为little-endian,请将CFSwapInt16HostToBig更改为CFSwapInt16HostToLittle