iOS - Objective-C 字符串操作类

项目开发中自己编写的一个字符串操作相关的类:

  • 16 进制数转字符串
  • 计算校验码
  • 转换内容为 10 进制的字符串的数据 为 长度为 2 的 16进制的字符串,其它长度字符串返回 nil
  • 转换时间时分为固定长度的字符串,6时16分 -> 06:16
  • 转换固定格式的时间字符串为分钟数,06:16 -> 6 * 60 + 16 = 376
StringRelatedManager.h
复制代码
//
//  StringRelatedManager.h
//  FluvalSmartApp
//
//  Created by huang zhengguo on 16/10/20.
//  Copyright © 2016年 huang zhengguo. All rights reserved.
//

@interface StringRelatedManager : BaseBleObject

/* 16进制转字符串 */
+ (NSString *)hexToStringWithData:(NSData *)data;

/* 计算16进制校验码 */
+ (NSString *)calculateXORWithArray:(NSArray *)array;
+ (NSString *)calculateXORWithString:(NSString *)str;

//转换内容为10进制的数据字符串为长度为2的16进制的字符串,其它长度字符串返回nil
+ (NSString *)convertToHexStringWithString:(NSString *)str;

+ (NSString *)generateTimeStrWithHour:(NSInteger)hour minute:(NSInteger)minute;

+ (NSInteger)generateMinutesWithHourMinuteTimeStr:(NSString *)str;

+ (NSString *)generateTimeStrWithTimeStr:(NSString *)timeStr;

+ (NSString *)convertFormatDateToHexStr:(NSString *)dateStr;

// 把两个字节(16进制)的时间节点转换为坐标轴
+ (NSInteger)covertTimeToXIndexWithTimeStr:(NSString *)timeStr;

// 根据字符串计算百分比
+ (NSInteger)calculateColorValueWithColorStr:(NSString *)colorStr;

@end
复制代码
StringRelatedManager.m
复制代码
//
//  StringRelatedManager.m
//  FluvalSmartApp
//
//  Created by huang zhengguo on 16/10/20.
//  Copyright © 2016年 huang zhengguo. All rights reserved.
//

#import "StringRelatedManager.h"

@implementation StringRelatedManager

// 把data数据转换成十六进制字符串
+ (NSString *)hexToStringWithData:(NSData *)data{
    
    // 把data数据转换为字节数组
    Byte *bytes = (Byte *)[data bytes];
    NSString *hexStr = @"";
    for (int i=0; i<[data 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];
        }
    }
    
    return hexStr;
}

+ (NSString *)calculateXORWithArray:(NSArray *)array{
    
    NSInteger hexInt = 0;
    NSInteger xorInt = 0;
    for (NSString *hexStr in array) {
        
        /* 把16进制的字符串转换为整形值 */
        hexInt = strtoul([hexStr UTF8String], 0, 16);
        
        xorInt = (xorInt ^ hexInt);
        
    }
    
    NSString *hexStr = [NSString stringWithFormat:@"%0lx",(long)xorInt];

    return hexStr;
}

+ (NSString *)calculateXORWithString:(NSString *)str{

    if (str.length % 2 != 0){
        
        return nil;
    }
    
    NSInteger hexInt = 0;
    NSInteger xorInt = 0;
    for (int i=0; i<str.length / 2; i++) {
        
        NSString *subStr = [str substringWithRange:NSMakeRange(i * 2, 2)];
        
        hexInt = strtol([subStr UTF8String], 0, 16);
        
        xorInt = (xorInt ^ hexInt);
    }
    
    NSString *xor = [NSString stringWithFormat:@"%0lx",(long)xorInt];
    if (xor.length < 2){
        
        xor = [NSString stringWithFormat:@"0%@",xor];
    }
    
    return xor;
}

+ (NSString *)convertToHexStringWithString:(NSString *)str{
    
    NSInteger value = [str integerValue];
    NSString *hexStr = [NSString stringWithFormat:@"%0lx",(long)value];
    if (hexStr.length > 2){
        
        return nil;
    }
    
    if (hexStr.length == 1){
        
        return [NSString stringWithFormat:@"0%@",hexStr];
    }
    
    return hexStr;
}

+ (NSString *)generateTimeStrWithHour:(NSInteger)hour minute:(NSInteger)minute{
    
    NSString *hourStr = [NSString stringWithFormat:@"%02ld",hour];
    NSString *minuteStr = [NSString stringWithFormat:@"%02ld",minute];
    
    return [NSString stringWithFormat:@"%@:%@",hourStr,minuteStr];
}

+ (NSString *)generateTimeStrWithTimeStr:(NSString *)timeStr{
    //解析小时
    NSInteger hourInt = strtol([[timeStr substringToIndex:2] UTF8String], 0, 16);
    //解析分钟
    NSInteger minuteInt = strtol([[timeStr substringFromIndex:2] UTF8String], 0, 16);
    
    NSString *hourStr = [NSString stringWithFormat:@"%02ld",hourInt];
    NSString *minuteStr = [NSString stringWithFormat:@"%02ld",minuteInt];
    
    return [NSString stringWithFormat:@"%@:%@",hourStr,minuteStr];
}

#pragma mark 把日期字符串转换为16进制字符串:17:30
+ (NSString *)convertFormatDateToHexStr:(NSString *)dateStr{
    NSString *hourStr = [self convertToHexStringWithString:[dateStr substringToIndex:2]];
    NSString *minuteStr = [self convertToHexStringWithString:[dateStr substringFromIndex:3]];
    
    return [NSString stringWithFormat:@"%@%@",hourStr,minuteStr];
}

+ (NSInteger)generateMinutesWithHourMinuteTimeStr:(NSString *)str{
    
    NSInteger hourInt = [[str substringToIndex:2] integerValue];
    NSInteger minuteInt = [[str substringFromIndex:3] integerValue];
    
    return (hourInt * 60 + minuteInt);
}

#pragma mark --- 把十六进制的日期字符串转换为横坐标
+ (NSInteger)covertTimeToXIndexWithTimeStr:(NSString *)timeStr{
    NSInteger hourInt = 0;
    NSInteger minuteInt = 0;
    
    // 解析小时
    hourInt = strtol([[timeStr substringToIndex:2] UTF8String], 0, 16);
    // 解析分钟
    minuteInt = strtol([[timeStr substringFromIndex:2] UTF8String], 0, 16);
    
    //生成X轴坐标
    if ((minuteInt == 0) || (minuteInt > 0 && minuteInt < 15)){
        
        return hourInt * 2;
    }else if (minuteInt > 45 && minuteInt < 60){
        
        return hourInt * 2 + 2;
    }else{
        
        return hourInt * 2 + 1;
    }
}

+ (NSInteger)calculateColorValueWithColorStr:(NSString *)colorStr{
    // 根据model的值设置存在的值
    NSString *lowByte = @"";
    NSString *highByte = @"";
    
    lowByte = [colorStr substringToIndex:2];
    highByte = [colorStr substringFromIndex:2];
    return strtol([[NSString stringWithFormat:@"%@%@",highByte,lowByte] UTF8String], 0, 16);
}

@end
复制代码

 

posted @   sims  阅读(136)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示