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