iOS NSData 和十六进制字符串之间的相互转换

来源:互联网 发布:java多线程调用单例 编辑:程序博客网 时间:2024/05/18 03:54

其中将十六进制字符串转换成NSData的代码如下:

- (NSData *)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];        [hexData appendData:entity];                range.location += range.length;        range.length = 2;    }        LEDEBUG(@"hexdata: %@", hexData);    return hexData;}

将NSData转换成十六进制的字符串则可使用如下方式:


- (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;}





0 0
原创粉丝点击