将十六进制字符串转换为十六进制数

时间:2011-10-18 21:30:59

标签: iphone objective-c ios nsstring nsdata

我目前有一个包含十六进制值的NSString。我需要将此NSString对象转换为NSData对象,而不更改其内容。

1 个答案:

答案 0 :(得分:8)

我使用此代码“解析”NSData对象的调试输出(如果你只是NSLog NSData对象,你在控制台中得到的)返回NSData:

-(NSData*) bytesFromHexString:(NSString *)aString;
{
    NSString *theString = [[aString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] componentsJoinedByString:nil];

    NSMutableData* data = [NSMutableData data];
    int idx;
    for (idx = 0; idx+2 <= theString.length; idx+=2) {
        NSRange range = NSMakeRange(idx, 2);
        NSString* hexStr = [theString substringWithRange:range];
        NSScanner* scanner = [NSScanner scannerWithString:hexStr];
        unsigned int intValue;
        if ([scanner scanHexInt:&intValue])
            [data appendBytes:&intValue length:1];
    }
    return data;
}

这不是我最强大的代码,但它完成了解析[nsdata_object description]的工作。