123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520 |
- //
- // 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<length) {
-
- NSUInteger inter = length-str.length;
-
- for (int i=0;i< inter; i++) {
-
- string = [NSString stringWithFormat:@"0%@",str];
-
- str = string;
-
- }
-
- }
-
- return string;
-
- }
- //格式化时间 传入分钟(min)返回分钟+小时(0h 0min)
- + (NSString *)getTimeByminNumber:(NSNumber *)minNum {
- if ([minNum intValue] < 60) {
- return [NSString stringWithFormat:@"0h %@min",minNum];
- }else {
- int sss = ([minNum intValue] - 60) % 60;
- int hours = [minNum intValue] / 60;
- return [NSString stringWithFormat:@"%dh %dmin",hours,sss];
- }
- }
- //获取当前时间
- - (NSString *)currentDateStrWithformater:(NSString *)dateFormater{
- NSDate *currentDate = [NSDate date];//获取当前时间,日期
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 创建一个时间格式化对象
- [dateFormatter setDateFormat:dateFormater];//设定时间格式,这里可以设置成自己需要的格式
- NSString *dateString = [dateFormatter stringFromDate:currentDate];//将时间转化成字符串
- return dateString;
-
- }
- - (NSInteger)numberOfDaysWithFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate{
- NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
- NSDateComponents * comp = [calendar components:NSCalendarUnitDay fromDate:fromDate toDate:toDate options:NSCalendarWrapComponents];
- NSLog(@" -- >> 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
|