美文网首页
IOS 16进制字符串转Byte数组

IOS 16进制字符串转Byte数组

作者: zhhehj | 来源:发表于2019-11-29 10:52 被阅读0次

    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 = <f0220d03 41424308 38383838 39393939 b4>
    最后把这个data写入蓝牙外设就OK了

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

    相关文章

      网友评论

          本文标题:IOS 16进制字符串转Byte数组

          本文链接:https://www.haomeiwen.com/subject/kmmwwctx.html