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

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蓝牙发送数据出去所遇问题(对数据的处理))