app要與藍(lán)牙外設(shè)進(jìn)行通信,如果是固定長度的信息比如“注冊(cè)成功”、“注冊(cè)失敗”這樣的,可以固定寫死
例:
Byte byteArray[8] = {0xf0,0x20,0x04,0x54,0x52,0x55,0x45,0x54};
NSData *data = [NSData dataWithBytes:byteArray length:8];
NSLog(@"%@",data);
[peripheral writeValue:data forCharacteristic:weakself.writeCharacteristic type:CBCharacteristicWriteWithoutResponse];//向藍(lán)牙中寫入數(shù)據(jù)
but
如果是像賬號(hào)密碼這樣的東西怎么整呢?研究好好長一段時(shí)間,才有結(jié)果
我是把16進(jìn)制的數(shù)每一個(gè)都以字符串的形式保存在NSArray的數(shù)組中
例如下邊的這個(gè)數(shù)組md
(
f0,
22,
0D,
03,
41,
42,
43,
08,
38,
38,
38,
38,
39,
39,
39,
39,
b4
)
最后通過下邊的代碼可以將數(shù)據(jù)存在byte數(shù)組中
Byte byte[md.count];
for (int i = 0; i < md.count; i++) {
NSString *str = md[i];
char *p;
unsigned long num = strtoul([str UTF8String], &p, 16);//將16進(jìn)制轉(zhuǎn)換成十進(jìn)制
byte[i] = num;
}
NSData *data = [NSData dataWithBytes:byte length:md.count];
data = <f0220d03 41424308 38383838 39393939 b4>
最后把這個(gè)data寫入藍(lán)牙外設(shè)就OK了
有時(shí)需要取某些數(shù)的低八位
可以將得到的數(shù)字轉(zhuǎn)換成二進(jìn)制,16進(jìn)制數(shù)字對(duì)應(yīng)16位的二進(jìn)制,如果不足16位可以在前面補(bǔ)上相應(yīng)位數(shù)的0。如果得到的結(jié)果大于8位就沒必要在前面補(bǔ)零,然后直接截取后面的8位就是低八位