2011-10-18 194 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

謝謝,它的作品! –

相關問題