iOS代码片段

    xiaoxiao2021-04-18  62

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

    NSData * convertHexStrToData(NSString *str)

    {

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

            return nil;

        }

        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) {

            unsigned int 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:^(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;

    }

    转载请注明原文地址: https://ju.6miu.com/read-675494.html

    最新回复(0)