// // UUUtils.m // StreetLampProject // // Created by lhn on 2018/3/24. // Copyright © 2018年 UU. All rights reserved. // #import "UUUtils.h" #import "NSData+CRC16.h" #import "NSString+WithCRCModbus.h" @interface UUUtils () @property (nonatomic,strong)NSMutableArray *yearDataAll;//年份数组 @property (nonatomic,strong)NSMutableArray *monthDataAll;//月份数组 @property (nonatomic,strong)NSMutableArray *dayDataAll;//日期数组 @end @implementation UUUtils //分包发送蓝牙数据 -(void)sendMsgWithSubPackage:(NSData*)msgData{ for (int i = 0; i < [msgData length]; i += 20) { // 预加 最大包长度,如果依然小于总数据长度,可以取最大包数据大小 if ((i + 20) < [msgData length]) { NSString *rangeStr = [NSString stringWithFormat:@"%i,%i", i, 20]; NSData *subData = [msgData subdataWithRange:NSRangeFromString(rangeStr)]; NSLog(@"%@",subData); //根据接收模块的处理能力做相应延时 // usleep(20 * 1000); } else { NSString *rangeStr = [NSString stringWithFormat:@"%i,%i", i, (int)([msgData length] - i)]; NSData *subData = [msgData subdataWithRange:NSRangeFromString(rangeStr)]; // usleep(20 * 1000); } } } //汉字转unicode + (NSString *) utf8ToUnicode:(NSString *)string{ NSUInteger length = [string length]; NSMutableString *str = [NSMutableString stringWithCapacity:0]; for (int i = 0;i < length; i++){ NSMutableString *s = [NSMutableString stringWithCapacity:0]; unichar _char = [string characterAtIndex:i]; // 判断是否为英文和数字 if (_char <= '9' && _char >='0'){ NSString *a = [UUUtils hexStringFromString:[string substringWithRange:NSMakeRange(i,1)]]; [s appendFormat:@"00%@",a]; }else if(_char >='a' && _char <= 'z'){ NSString *a = [UUUtils hexStringFromString:[string substringWithRange:NSMakeRange(i,1)]]; [s appendFormat:@"00%@",a]; }else if(_char >='A' && _char <= 'Z') { NSString *a = [UUUtils hexStringFromString:[string substringWithRange:NSMakeRange(i,1)]]; [s appendFormat:@"00%@",a]; }else{ // 中文和字符 [s appendFormat:@"\\u%x",[string characterAtIndex:i]]; // 不足位数补0 否则解码不成功 if (s.length == 4) { [s insertString:@"00" atIndex:2]; } else if (s.length == 5) { [s insertString:@"0" atIndex:2]; } } [str appendFormat:@"%@", s]; } NSString* aStr = [str stringByReplacingOccurrencesOfString:@"\\u" withString:@""]; return aStr; } + (NSString *)deUnicodeStringFromHexString:(NSString *)hexString { //每4位16进制Unicode编码转为一个字符 if(hexString.length%4!=0||hexString==nil) return nil; NSString *enUnicode; NSMutableString *deUnicode; for(NSInteger i=0;i<(hexString.length/4);i++) { unsigned int anInt; enUnicode=[hexString substringWithRange:NSMakeRange(i*4,4)]; NSScanner * scanner = [[NSScanner alloc] initWithString:enUnicode]; [scanner scanHexInt:&anInt]; enUnicode=[NSString stringWithFormat:@"%C",(unichar)anInt]; if(i==0) deUnicode=[NSMutableString stringWithString:enUnicode]; else [deUnicode appendString:enUnicode]; } return deUnicode; } //将十六进制字符串转换成汉字 + (NSString *)ChineseStringFromHexString:(NSString *)hexString { // eg. hexString = @"8c376b4c" char *myBuffer = (char *)malloc((int)[hexString length] / 2 + 1); bzero(myBuffer, [hexString length] / 2 + 1); for (int i = 0; i < [hexString length] - 1; i += 2) { unsigned int anInt; NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)]; NSScanner * scanner = [[NSScanner alloc] initWithString:hexCharStr] ; [scanner scanHexInt:&anInt]; myBuffer[i / 2] = (char)anInt; } NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:NSUnicodeStringEncoding]; // printf("%s\n", myBuffer); free(myBuffer); NSString *temp1 = [unicodeString stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"]; NSString *temp2 = [temp1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; NSString *temp3 = [[@"\"" stringByAppendingString:temp2] stringByAppendingString:@"\""]; NSData *tempData = [temp3 dataUsingEncoding:NSUTF8StringEncoding]; NSString *temp4 = [NSPropertyListSerialization propertyListFromData:tempData mutabilityOption:NSPropertyListImmutable format:NULL errorDescription:NULL]; NSString *string = [temp4 stringByReplacingOccurrencesOfString:@"\\r\\n" withString:@"\n"]; NSLog(@"-------string----%@", string); //输出 谷歌 return string; } //CRC 校验 +(NSString *)CRC16Test:(NSString *)string{ NSData *data =[[string withCrc16CCITT] toNSData]; NSLog(@"crc data - %@",data); NSString *str = [string withCrc16CCITT]; NSString *str2 = [str stringByReplacingOccurrencesOfString:@" " withString:@""]; NSString *str3 = [str2 stringByReplacingOccurrencesOfString:@"<" withString:@""]; NSString *str4 = [str3 stringByReplacingOccurrencesOfString:@">" withString:@""]; return str4; } //普通字符串转换为十六进制的。 + (NSString *)hexStringFromString:(NSString *)string{ NSData *myD = [string dataUsingEncoding:NSUTF8StringEncoding]; Byte *bytes = (Byte *)[myD bytes]; //下面是Byte 转换为16进制。 NSString *hexStr=@""; for(int i=0;i<[myD length];i++) { NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数 if([newHexStr length]==1) hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr]; else hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr]; } NSLog(@"十六进制 -- %@",hexStr); return hexStr; } // 十六进制转换为普通字符串的。 + (NSString *)stringFromHexString:(NSString *)hexString { // NSLog(@" f要处理的的 hex %@",hexString); char *myBuffer = (char *)malloc((int)[hexString length] / 2 + 1); bzero(myBuffer, [hexString length] / 2 + 1); for (int i = 0; i < [hexString length] - 1; i += 2) { unsigned int anInt; NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)]; NSScanner * scanner = [[NSScanner alloc] initWithString:hexCharStr] ; [scanner scanHexInt:&anInt]; myBuffer[i / 2] = (char)anInt; } NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:4]; NSLog(@"------字符串=======%@",unicodeString); return unicodeString; } #pragma mark - 获取某年某月的天数 + (NSInteger)howManyDaysInThisYear:(NSInteger)year withMonth:(NSInteger)month{ return [self howManyDaysInThisYear:year withMonth:month]; } - (NSInteger)howManyDaysInThisYear:(NSInteger)year withMonth:(NSInteger)month{ if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) return 31 ; if((month == 4) || (month == 6) || (month == 9) || (month == 11)) return 30; if((year % 4 == 1) || (year % 4 == 2) || (year % 4 == 3)) { return 28; } if(year % 400 == 0) return 29; if(year % 100 == 0) return 28; return 29; } /** * 获取b19 负载异常 */ + (NSInteger)getB19ByHex:(NSString *)hex { NSString *binaryStr = [[self class ]getBinaryByHex:hex]; // 倒序 NSString *bit19Str = [binaryStr substringWithRange:NSMakeRange(32- 19 - 1, 1)]; NSInteger bit19 = [bit19Str integerValue]; return bit19; } /** * 获取b24 太阳板异常 */ + (NSInteger)getB28ByHex:(NSString *)hex { NSString *binaryStr = [[self class ]getBinaryByHex:hex]; // 倒序 NSString *bit28Str = [binaryStr substringWithRange:NSMakeRange(32- 28 - 1, 1)]; NSInteger bit28 = [bit28Str integerValue]; return bit28; } /** 十六进制转换为二进制 @param hex 十六进制数 @return 二进制数 */ + (NSString *)getBinaryByHex:(NSString *)hex { NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] initWithCapacity:16]; [hexDic setObject:@"0000" forKey:@"0"]; [hexDic setObject:@"0001" forKey:@"1"]; [hexDic setObject:@"0010" forKey:@"2"]; [hexDic setObject:@"0011" forKey:@"3"]; [hexDic setObject:@"0100" forKey:@"4"]; [hexDic setObject:@"0101" forKey:@"5"]; [hexDic setObject:@"0110" forKey:@"6"]; [hexDic setObject:@"0111" forKey:@"7"]; [hexDic setObject:@"1000" forKey:@"8"]; [hexDic setObject:@"1001" forKey:@"9"]; [hexDic setObject:@"1010" forKey:@"A"]; [hexDic setObject:@"1011" forKey:@"B"]; [hexDic setObject:@"1100" forKey:@"C"]; [hexDic setObject:@"1101" forKey:@"D"]; [hexDic setObject:@"1110" forKey:@"E"]; [hexDic setObject:@"1111" forKey:@"F"]; NSString *binary = @""; for (int i=0; i<[hex length]; i++) { NSString *key = [hex substringWithRange:NSMakeRange(i, 1)]; NSString *value = [hexDic objectForKey:key.uppercaseString]; if (value) { binary = [binary stringByAppendingString:value]; } } return binary; } // 16进制转10进制 + (NSNumber *) numberHexString:(NSString *)aHexString { // 为空,直接返回. if (nil == aHexString){ return nil; } NSScanner * scanner = [NSScanner scannerWithString:aHexString]; unsigned long long longlongValue; [scanner scanHexLongLong:&longlongValue]; //将整数转换为NSNumber,存储到数组中,并返回. NSNumber * hexNumber = [NSNumber numberWithLongLong:longlongValue]; return hexNumber; } /** 十进制转换十六进制 */ + (NSString *)getHexByDecimal:(NSInteger)decimal { NSString *hex =@""; NSString *letter; NSInteger number; for (int i = 0; i<9; i++) { number = decimal % 16; decimal = decimal / 16; switch (number) { case 10: letter =@"A"; break; case 11: letter =@"B"; break; case 12: letter =@"C"; break; case 13: letter =@"D"; break; case 14: letter =@"E"; break; case 15: letter =@"F"; break; default: letter = [NSString stringWithFormat:@"%ld", number]; } hex = [letter stringByAppendingString:hex]; if (decimal == 0) { break; } } if (hex.length < 4) { NSUInteger inter = 4-hex.length; for (int i=0;i< inter; i++) { hex = [NSString stringWithFormat:@"0%@",hex]; } } return hex; } //字符串补零操作 +(NSString *)addZero:(NSString *)str withLength:(int)length{ NSString *string = nil; if (str.length==length) { return str; } if (str.length> comp : %@ << --",comp); return comp.day; } //历史数据算地址 - (NSMutableArray *)returnDateArrayWithSelectedDate:(NSString *)selectDataStr { // NSDate *data = [NSDate date]; // NSDateFormatter *formatter=[[NSDateFormatter alloc] init]; // [formatter setDateFormat:@"yyyy-MM-dd"]; // NSString * dateStrNo = [formatter stringFromDate:data];//设定时间格式,这里可以设置成自己需要的格式 // NSLog(@" dateStrNo - %@",dateStrNo); // NSLog(@"selectDataStr - %@",selectDataStr); // if ([selectDataStr isEqualToString:NSLocalizedString(@"all", nil)]) { // // 全部 // NSMutableArray *dateArr = [NSMutableArray array]; // for (int i = 0; i < self.yearDataAll.count; i++) { // NSInteger days = [self numberOfDaysWithFromDate:[formatter dateFromString:self.yearDataAll[i]] toDate:[formatter dateFromString:dateStrNo]]; // if (days >= 0 && days < 2000) { // NSInteger integn = [[UUUtils numberHexString:@"f000"] integerValue] + days; // NSString *dareStr = [NSString stringWithFormat:@"ff03%@0001",[UUUtils getHexByDecimal:integn]]; // [dateArr addObject:dareStr]; // } // } // NSLog(@"self.dateArr = %@",dateArr); // return dateArr; // }else if (selectDataStr.length == 4) { // // 年份 // NSMutableArray *dateArr = [NSMutableArray array]; // for (int i = 0; i < self.monthDataAll.count; i++) { // NSString *forDStr = [NSString stringWithFormat:@"%@-%@-01",selectDataStr,self.monthDataAll[i]]; // NSInteger days = [self numberOfDaysWithFromDate:[formatter dateFromString:forDStr] toDate:[formatter dateFromString:dateStrNo]]; // if (days >= 0 && days < 2000) { // NSInteger integn = [[UUUtils numberHexString:@"f000"] integerValue] + days; // NSString *dareStr = [NSString stringWithFormat:@"ff03%@0001",[UUUtils getHexByDecimal:integn]]; // [dateArr addObject:dareStr]; // } // // } // NSLog(@"self.dateArr = %@",dateArr); // return dateArr; // }else { // // int start = 0 ; // // NSArray *selecteddataarray1 = [selectDataStr componentsSeparatedByString:@"-"]; // // int currrentDay1 = [[self currentDayStr]intValue]; // if (currrentDay1 > 8 ) { // start = currrentDay1 - 8 ; // } NSMutableArray *dateArr = [NSMutableArray array]; for (int i = 7; i >= 0 ; i --) { // NSLog(@"测试2 -----%d",i); // NSArray *selecteddataarray = [selectDataStr componentsSeparatedByString:@"-"]; // NSString *forDStr = [NSString stringWithFormat:@"%@-%@-%@",selecteddataarray[0],selecteddataarray[1],self.dayDataAll[i]]; // NSLog(@"当天%@",forDStr); // NSInteger days = [self numberOfDaysWithFromDate:[formatter dateFromString:forDStr] toDate:[formatter dateFromString:dateStrNo]]; // NSLog(@"days --- %zd ",days); // if (days >= 0 && days < 2000) { NSInteger integn = [[UUUtils numberHexString:@"f000"] integerValue] + i; NSString *dareStr = [NSString stringWithFormat:@"ff03%@0001",[UUUtils getHexByDecimal:integn]]; [dateArr addObject:dareStr]; // } } NSLog(@" 发送的数据 self.dateArr = %@",dateArr); return dateArr; // } } +(NSString *)currentDayStr{ return [self currentDayStr]; } //获取当前是几号 -(NSString *)currentDayStr{ NSDate *currentDate = [NSDate date];//获取当前时间,日期 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 创建一个时间格式化对象 [dateFormatter setDateFormat:@"dd"];//设定时间格式,这里可以设置成自己需要的格式 NSString *dateString = [dateFormatter stringFromDate:currentDate];//将时间转化成字符串 NSLog(@"现在是 %@号",dateString); return dateString; } -(NSMutableArray *)yearDataAll { if (!_yearDataAll) { _yearDataAll = [[NSMutableArray alloc] initWithObjects:@"2014-01-01",@"2015-01-01",@"2016-01-01",@"2017-01-01",@"2018-01-01",nil]; } return _yearDataAll; } -(NSMutableArray *)monthDataAll { if (!_monthDataAll) { _monthDataAll = [[NSMutableArray alloc] initWithObjects:@"01",@"03",@"05",@"07",@"09",@"11",nil]; } return _monthDataAll; } -(NSMutableArray *)dayDataAll { if (!_dayDataAll) { _dayDataAll = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",@"18",@"19",@"20",@"21",@"22",@"23",@"24",@"25",@"26",@"27",@"28",@"29",@"30",@"31",nil]; } return _dayDataAll; } @end