iOS代码片段

来源:互联网 发布:当前网络安全形势 编辑:程序博客网 时间:2024/05/23 23:42

一、字符串与NSData之间直接转换


NSData * convertHexStrToData(NSString *str)

{

    if (!str || [str length] ==0) {

        returnnil;

    }

    NSString * trimmingStr = [str stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];

    NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];

    NSRange range;

    if ([trimmingStr length] %2 == 0) {

        range = NSMakeRange(0,2);

    } else {

        range = NSMakeRange(0,1);

    }

    for (NSInteger i = range.location; i < [trimmingStr length]; i +=2) {

        unsignedint anInt;

        NSString *hexCharStr = [trimmingStr 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;

}

NSString * convertDataToHexStr(NSData *data) {

    if (!data || [data length] ==0) {

        return@"";

    }

    NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];

    

    [data enumerateByteRangesUsingBlock:^(constvoid *bytes, NSRange byteRange,BOOL *stop) {

        unsignedchar *dataBytes = (unsignedchar*)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