2011-10-18 191 views
3

我目前有一个包含十六进制值的NSString。我需要将这个NSString对象转换为一个NSData对象,根本不需要改变它的内容。将十六进制字符串转换为十六进制数据

+0

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

回答

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]。

+0

像魅力一样工作,谢谢! –

+0

谢谢,它的作品! –

相关问题