OC数据类型转换

来源:互联网 发布:淘宝图片去同款 编辑:程序博客网 时间:2024/06/05 17:34

一、NSString和NSData
1、NSString 转 NSData

NSString *aString = @"1234abcd";NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding];

2、NSData 转 NSString

NSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding];

二、NSData和Byte
1、NSData 转 Byte

NSString *testString = @"1234567890";NSData *testData = [testString dataUsingEncoding: NSUTF8StringEncoding];Byte *testByte = (Byte *)[testData bytes];

2、Byte 转 NSData

Byte byte[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};   NSData *adata = [[NSData alloc] initWithBytes:byte length:sizeof(byte)];

三、NSString和char
1、NSString转char

const char * filePathChar = [filePath UTF8String];

2、char转nsstring

char myChar = 'a';NSString * string = [NSString stringWithFormat:@"%c", myChar];

四、NSString和short
1、NSString转unsigned short

unsigned short * utfString = [nsString cStringUsingEncoding:NSUTF16StringEncoding];  

五、16进制字符串和NSData
1、将16进制的字符串转换成NSData

+ (NSMutableData *)convertHexStrToData:(NSString *)str {    if (!str || [str length] == 0) {        return nil;    }    NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];    NSRange range;    if ([str length] %2 == 0) {        range = NSMakeRange(0,2);    } else {        range = NSMakeRange(0,1);    }    for (NSInteger i = range.location; i < [str length]; i += 2) {        unsigned int anInt;        NSString *hexCharStr = [str substringWithRange:range];        NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];        [scanner scanHexInt:&anInt];        NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];        NSLog(@"转换数据--%ld:%@", (long)i,entity);        [hexData appendData:entity];        range.location += range.length;        range.length = 2;    }    return hexData;}

2、将NSData转换成16进制的字符串

+ (NSString *)convertDataToHexStr:(NSData *)data {    if (!data || [data length] == 0) {        return @"";    }    NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];    [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange,BOOL *stop) {        unsigned char *dataBytes = (unsigned char*)bytes;        for (NSInteger i =0; i < byteRange.length; i++) {            NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) &0xff];            if ([hexStr length] == 2) {                [string appendString:hexStr];            } else {                [string appendFormat:@"0%@", hexStr];            }        }    }];    return string;}