1、格式转换,UInt64转为NSString
#define KB 1024
#define MB (1024*KB)
#define GB (1024*MB)
#define TB ((UInt64)1024*GB)
+ (NSString*)numberFormatWWith:(UInt64)size {
if (size >= 10000) {
return [NSString stringWithFormat:@"%.1fw", (size/10000.0f)];
} else {
return @(size).stringValue;
}
}
+ (NSString*)volumeWith:(UInt64)size {
if (size > (UInt64)TB)
{
return [NSString stringWithFormat:@"%0.2fT", (double)size / TB];
}
else if (size > GB)
{
return [NSString stringWithFormat:@"%0.2fG", (double)size / GB];
}
else if (size > MB)
{
return [NSString stringWithFormat:@"%0.2fM", (double)size / MB];
}
else if (size > KB)
{
return [NSString stringWithFormat:@"%0.2fK", (double)size / KB];
}
else
{
return [NSString stringWithFormat:@"%lluB", size];
}
return nil;
}
2、手机号字符处理
- (NSString *)stringByTrimingWhitespace {
return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (NSUInteger)numberOfLines {
return [[self componentsSeparatedByString:@"\n"] count] + 1;
}
- (NSString *)encryptPhone {
NSMutableString *phone = [NSMutableString stringWithString:self];
if (phone && phone.length >= 8) {
[phone replaceCharactersInRange:NSMakeRange(phone.length-8, 4) withString:@"****"];
}
return phone;
}
3、URL Encode
- (NSString *)urlEncodeString {
static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@"; // does not include "?" or "/" due to RFC 3986 - Section 3.4
static NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;=";
NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
[allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]];
// FIXME: https://github.com/AFNetworking/AFNetworking/pull/3028
// return [self stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
static NSUInteger const batchSize = 50;
NSUInteger index = 0;
NSMutableString *escaped = @"".mutableCopy;
while (index < self.length) {
NSUInteger length = MIN(self.length - index, batchSize);
NSRange range = NSMakeRange(index, length);
// To avoid breaking up character sequences such as 👴🏻👮🏽
range = [self rangeOfComposedCharacterSequencesForRange:range];
NSString *substring = [self substringWithRange:range];
NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
[escaped appendString:encoded];
index += range.length;
}
return escaped;
}
4、MD5,AES加密
- (NSString *)getStringMd5:(NSString *)str {
const char *cStr = [str UTF8String];
unsigned char result[16];
CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
] lowercaseString];
}
-(NSString *) aes256_encrypt:(NSString *)key {
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:self.length];
//对数据进行加密
NSData *result = [data aes256_encrypt:key];
//转换为2进制字符串
if (result && result.length > 0) {
Byte *datas = (Byte*)[result bytes];
NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2];
for(int i = 0; i < result.length; i++){
[output appendFormat:@"%02x", datas[i]];
}
return output;
}
return nil;
}
- (NSString *) aes256_decrypt:(NSString *)key {
//转换为2进制Data
NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
int i;
for (i=0; i < [self length] / 2; i++) {
byte_chars[0] = [self characterAtIndex:i*2];
byte_chars[1] = [self characterAtIndex:i*2+1];
whole_byte = strtol(byte_chars, NULL, 16);
[data appendBytes:&whole_byte length:1];
}
//对数据进行解密
NSData* result = [data aes256_decrypt:key];
if (result && result.length > 0) {
return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
}
return nil;
}
5、计算Label的宽高
- (CGFloat)heightWithLabelFont:(UIFont *)font {
CGFloat height = 0;
if(self.length ==0)
{
height = 0;
}
else
{
CGSize rectSize = [self sizeWithAttributes:@{NSFontAttributeName:font}];
height = rectSize.height;
}
return height;
}
- (CGFloat)heightWithLabelFont:(UIFont *)font withLabelWidth:(CGFloat)width {
CGFloat height = 0;
if(self.length ==0)
{
height = 0;
}
else
{
NSDictionary *attribute = @{NSFontAttributeName:font};
CGSize rectSize = [self boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
options:NSStringDrawingTruncatesLastVisibleLine|
NSStringDrawingUsesLineFragmentOrigin|
NSStringDrawingUsesFontLeading
attributes:attribute
context:nil].size;
height = rectSize.height;
}
return height;
}
/**
* 根据文字内容动态计算UILabel宽高
* @param maxWidth label宽度
* @param font 字体
* @param lineSpacing 行间距
*/
- (CGRect)boundingRectWithWidth:(CGFloat)maxWidth withTextFont:(UIFont *)font withLineSpacing:(CGFloat)lineSpacing {
CGSize maxSize = CGSizeMake(maxWidth, CGFLOAT_MAX);
//段落样式
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
//设置行间距
[paragraphStyle setLineSpacing:lineSpacing];
//#warning 此处设置NSLineBreakByTruncatingTail会导致计算文字高度方法失效
// [paragraphStyle setLineBreakMode:NSLineBreakByTruncatingTail];
//计算文字尺寸
CGRect rect = [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font,NSParagraphStyleAttributeName:paragraphStyle} context:nil];
return rect;
}
/**
* NSString转换成NSMutableAttributedString
* @param font 字体
* @param lineSpacing 行间距
*/
- (NSMutableAttributedString *)attributedStringFromStingWithFont:(UIFont *)font withLineSpacing:(CGFloat)lineSpacing {
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:self attributes:@{NSFontAttributeName:font}];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:lineSpacing];
[paragraphStyle setLineBreakMode:NSLineBreakByTruncatingTail]; //截断方式,"abcd..."
[attributedStr addAttribute:NSParagraphStyleAttributeName
value:paragraphStyle
range:NSMakeRange(0, [self length])];
return attributedStr;
}
6、富文本属性数组转富文本
- (NSMutableAttributedString *)mutableAttributedStringWithStringAttributes:(NSArray *)attributes {
NSMutableAttributedString *attributedString = nil;
if (self) {
attributedString = [[NSMutableAttributedString alloc] initWithString:self];
for (id <StringAttributeProtocol> attribute in attributes) {
[attributedString addAttribute:[attribute attributeName]
value:[attribute attributeValue]
range:[attribute effectiveStringRange]];
}
}
return attributedString;
}
- (NSAttributedString *)attributedStringWithStringAttributes:(NSArray *)attributes {
NSAttributedString *attributedString = nil;
if (self) {
NSMutableDictionary *attributesDictionary = [NSMutableDictionary dictionary];
for (id <StringAttributeProtocol> attribute in attributes) {
[attributesDictionary setObject:[attribute attributeValue]
forKey:[attribute attributeName]];
}
attributedString = [[NSAttributedString alloc] initWithString:self
attributes:attributesDictionary];
}
return attributedString;
}
7、NSData转base64的NSString
static char base64EncodingTable[64] = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
};
+ (NSString *) base64StringFromData:(NSData *)data length:(long)length {
unsigned long ixtext, lentext;
long ctremaining;
unsigned char input[3], output[4];
short i, charsonline = 0, ctcopy;
const unsigned char *raw;
NSMutableString *result;
lentext = [data length];
if (lentext < 1)
return @"";
result = [NSMutableString stringWithCapacity: lentext];
raw = [data bytes];
ixtext = 0;
while (true) {
ctremaining = lentext - ixtext;
if (ctremaining <= 0)
break;
for (i = 0; i < 3; i++) {
unsigned long ix = ixtext + i;
if (ix < lentext)
input[i] = raw[ix];
else
input[i] = 0;
}
output[0] = (input[0] & 0xFC) >> 2;
output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4);
output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6);
output[3] = input[2] & 0x3F;
ctcopy = 4;
switch (ctremaining) {
case 1:
ctcopy = 2;
break;
case 2:
ctcopy = 3;
break;
}
for (i = 0; i < ctcopy; i++)
[result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]];
for (i = ctcopy; i < 4; i++)
[result appendString: @"="];
ixtext += 3;
charsonline += 4;
if ((length > 0) && (charsonline >= length))
charsonline = 0;
}
return result;
}
8、时间戳与时间转换
#pragma mark - 将某个时间转化成 时间戳
+ (NSInteger)timeSwitchTimestamp:(NSString *)formatTime andFormatter:(NSString *)format{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:format]; //(@"YYYY-MM-dd hh:mm:ss") ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];
[formatter setTimeZone:timeZone];
NSDate* date = [formatter dateFromString:formatTime]; //------------将字符串按formatter转成nsdate
//时间转时间戳的方法:
NSInteger timeSp = [[NSNumber numberWithDouble:[date timeIntervalSince1970]] integerValue];
return timeSp;
}
#pragma mark - 将某个时间戳转化成 时间
+ (NSString *)timestampSwitchTime:(NSInteger)timestamp andFormatter:(NSString *)format{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:format]; // (@"YYYY-MM-dd hh:mm:ss")----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];
[formatter setTimeZone:timeZone];
NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSString *confromTimespStr = [formatter stringFromDate:confromTimesp];
return confromTimespStr;
}