IOS 16进制字符串转Byte数组

app要与蓝牙外设进行通信,如果是固定长度的信息比如“注册成功”、“注册失败”这样的,可以固定写死
例:
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];//向蓝牙中写入数据

but
如果是像账号密码这样的东西怎么整呢?研究好好长一段时间,才有结果
我是把16进制的数每一个都以字符串的形式保存在NSArray的数组中
例如下边的这个数组md
(
f0,
22,
0D,
03,
41,
42,
43,
08,
38,
38,
38,
38,
39,
39,
39,
39,
b4
)
最后通过下边的代码可以将数据存在byte数组中
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进制转换成十进制
byte[i] = num;
}

NSData *data = [NSData dataWithBytes:byte length:md.count];

data =
最后把这个data写入蓝牙外设就OK了

有时需要取某些数的低八位
可以将得到的数字转换成二进制,16进制数字对应16位的二进制,如果不足16位可以在前面补上相应位数的0。如果得到的结果大于8位就没必要在前面补零,然后直接截取后面的8位就是低八位

你可能感兴趣的:(IOS 16进制字符串转Byte数组)