美文网首页
蓝牙数据处理

蓝牙数据处理

作者: CoderZXS | 来源:发表于2019-03-01 16:17 被阅读0次

注:转载自按字节定义网络、蓝牙数据传输协议

按字节定义网络、蓝牙数据传输协议

先了解number、string、json格式数据、文件到二进制data数据的相互转换(Object-C)

number --> data 十进制转二进制

NSInteger number = 101;
NSData* numberData = [NSData dataWithBytes:& number length:4];

data --> number 二进制转十进制

NSInteger number = 0;//一定要给初始值,否则得出的结果是错误的
[data getBytes:&number range:NSMakeRange(0, 4)];//然后你的number里就有值了

string --> data

NSString* message = @"Hello World!";
NSData* data = [message dataUsingEncoding:(NSUTF8StringEncoding)];

data --> string

NSString* message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

json格式数据(字典、数组或者更深层的嵌套) --> data

NSArray* array = @[@{@"key": @"value"}, @(2)];
NSError* error = nil;
NSData* data = [NSJSONSerialization dataWithJSONObject:array options:kNilOptions error:&error];

data --> json格式数据

NSMutableArray* mutableArray = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:&error];
if ([mutableArray isKindOfClass:[NSMutableArray class]]) {
    NSLog(@"转换成功");
}

文件 --> data

NSData* data = [NSData dataWithContentsOfFile:@"/document/fileName.mp3"];
  • 注:文件大的时候不可以直接全部转为data放到内存中,发送的时候可分段读取到buffer中,系统自带的类NSInputStream 、NSOutputStream、 NSFileHandle均可以。

data --> 文件

图片示例
UIImage* image = [UIImage imageWithData:data]

  • 注:文件一般尽量不要在内存里加载为data去直接使用,会比较占用内存,一般都会把data写入本地再去调用

##############################################################################################################

自定义一个数据,格式如下:

1656410-7ab85bfcd99032ed.jpeg

定义一个待发送的data数据

  • mutData 就是最后要传输的数据,存储的是二进制数据,任何地方都适用。
NSString* message = @"Hello World!";
    NSData* data = [message dataUsingEncoding:(NSUTF8StringEncoding)];
    NSInteger type = 101;
    
    NSMutableData* mutData = [NSMutableData data];
//    1~4字节表示类型
    NSData* typeData = [NSData dataWithBytes:&type length:4]; //sizeof(type)
    [mutData appendData:typeData];
    
//    5~8字节表示数据总长度
    NSInteger bodyLength = data.length + 4 + 4;
    NSData* lengthData = [NSData dataWithBytes:&bodyLength length:4];
    [mutData appendData:uuidData];
    
//    再将文字追加上
    [mutData appendData:data];
    
    mutData 可直接传输

解析收到的data数据

  • 接收到的二进制数据需要再按字节解析,代码如下(Object-C)
另一个终端接收到了二进制数据data,开始解析

//    1~4字节表示类型
    NSInteger type = 0;//一定要给初始值,否则得出的结果是错误的
   [data getBytes:&type range:NSMakeRange(0, 4)];
    NSLog(@"数据类型: %ld", (long)type);
        
    //    5~8字节表示数据总长度
    NSInteger msgLength = 0;//一定要给初始值,否则得出的结果是错误的
    [data getBytes:&msgLength range:NSMakeRange(4, 4)];
    NSLog(@"数据长度: %ld", (long)msgLength);
        
    NSData* msgData = [data subdataWithRange:NSMakeRange(8, data.length - 8)];
    NSString* str = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];
    NSLog(@"接收到的消息为:%@", str);

转载:iOS 蓝牙开发和注意点

相关文章

网友评论

      本文标题:蓝牙数据处理

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