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

来源:互联网 发布:java 可视化界面 编辑:程序博客网 时间:2024/05/17 22:40

欢迎到个人博客: liumh.com查看本文。

本文为原创,未经允许勿转载


本文记录的是使用OC进行NSData和十六进制字符串之间的相互转换。其中将十六进制字符串转换成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;}

如果传入参数 str1ff, 则hexdata打印出:hexdata: <01ff>

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

将第一个例子中生成的NSData当做入参,则返回的string为01ff


如果觉得本文对你有帮助,就请用微信打赏我吧^_^

请叶秋喝杯咖啡吧

0 1
原创粉丝点击