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

3

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


澄清一下:您的字符串是否包含十六进制值作为ASCII表示(例如,{'6','e','7','5','6','c','6','c'}),还是包含一系列字节(例如,{0x6e,0x75,0x6c,0x6c})? - Kristopher Johnson
1个回答

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] 的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接