美文网首页蓝牙学习
iOS蓝牙发送数据出去所遇问题(对数据的处理)

iOS蓝牙发送数据出去所遇问题(对数据的处理)

作者: 开局四带二 | 来源:发表于2017-11-01 14:39 被阅读0次

    1.蓝牙发送数据的数据类型是 NSData类型.一般我们所获取的数据为字符串,期间如何转换。发送所遇到问题

    2.蓝牙发送具体数据格式,由硬件端所控制。一下记录为,本人项目中所遇情况。所发格式内容

    3.发送内容:WIFI账号  WIFI 密码

    4. 包头6字节:  0xbb  0x11(发送信息长度+4)  0x02 0x10 0x55 0x21(包数 21 表示分成两个包,这是第一个包。)

    5.中间信息13字节: (  WiFi账号字节长度(1字节)+WiFi账号内容+WIFI密码字节长度(1字节)+密码内容) /13 =包数

    6.包尾1字节:最后一个字节内容。cheksum=整个包的第二位数+后面所有的数据;

    这样就可以形成一个完整的20字节包,分包发送WIFI的账号密码信息内容。不满13字节的信息内容段用0补全

    其中遇到问题及代码:

    计算字符串字节数:

    //账号密码

    NSString *ssiStirng =self.ssid.text;

    NSString *passSting =self.pass.text;

    //账号密码 转nsdata

    NSData *ssiData = [ssiStirng dataUsingEncoding: NSUTF8StringEncoding];

    NSData *passData = [passSting dataUsingEncoding: NSUTF8StringEncoding];

    //计算出字符串字节数

    NSUInteger ssidall=ssiData.length;

    NSUInteger passall =passData.length;

    字符串转Byte数组:

    #pragma mark -->NSString-> NSData-> Byte数组

    -(NSMutableArray *)nsstingtoByte:(NSString *)string{

    NSData *testData = [string dataUsingEncoding: NSUTF8StringEncoding];

    //    将收到的NSData转Byte

    Byte *getbyte = (Byte *)[testData bytes];

    //    将的Byte转数组

    NSMutableArray *byteggg = [NSMutableArray array];

    for (int i=0 ; i<[testData length];i++) {

    [byteggg addObject:@(getbyte[i])];

    }

    return byteggg;

    }

    整形值直接变Byte数据类型:

    Byte ii=baoshu &0xff;

    创建Byte数组并赋值全是0:

    Byte xin[14]={0x00};

    拼接不同的Byte数组集合:

    NSMutableData * getMaxData = [[NSMutableData alloc] init];

    [getMaxData appendBytes: tou length: 6 ];

    [getMaxData appendBytes:xin length:14];

    一个工具类(字符串<-->nsdata):

    #import@interface NSData(Hex)

    - (NSString *)hexadecimalString;  (蓝牙数据接收回来的nsdata,可以用这个方法直接转字符串)

    + (NSData *)dataWithHexString:(NSString *)hexstring;

    @end

    #import "NSData+Hex.h"

    @implementation NSData(Hex)

    - (NSString *)hexadecimalString {

    /* Returns hexadecimal string of NSData. Empty string if data is empty.  */

    const unsigned char *dataBuffer = (const unsigned char *)[self bytes];

    if (!dataBuffer)

    return [NSString string];

    NSUInteger          dataLength  = [self length];

    NSMutableString    *hexString  = [NSMutableString stringWithCapacity:(dataLength * 2)];

    for (int i = 0; i < dataLength; ++i)

    [hexString appendString:[NSString stringWithFormat:@"%02lx", (unsigned long)dataBuffer[i]]];

    return [NSString stringWithString:hexString];

    }

    + (NSData *)dataWithHexString:(NSString *)hexstring

    {

    NSMutableData* data = [NSMutableData data];

    int idx;

    for (idx = 0; idx+2 <= hexstring.length; idx+=2) {

    NSRange range = NSMakeRange(idx, 2);

    NSString* hexStr = [hexstring substringWithRange:range];

    NSScanner* scanner = [NSScanner scannerWithString:hexStr];

    unsigned int intValue;

    [scanner scanHexInt:&intValue];

    [data appendBytes:&intValue length:1];

    }

    return data;

    }

    @end

    相关文章

      网友评论

        本文标题:iOS蓝牙发送数据出去所遇问题(对数据的处理)

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