您的位置:首页 > 移动开发 > IOS开发

iOS中16进制转nsdata

2016-09-27 11:50 597 查看
//data转16
+(NSString *)DataToHexStr:(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;
}
//16禁止转data
+(NSData *)HexStrToData:(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;
    }

    return hexData;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: