2015-09-11 28 views
0

有來自CFDictionaryGetValue數據返回象下面這樣:獲取CFStringRef或的NSString從「<>」的格式散列數據

CFDictionaryRef information; 
CFStringRef value = CFDictionaryGetValue(information,xxxx); // return a Hash code of some file 

則該值將<40f42cf8 fdf07523 99a7eb6e 2fccd041 1b642e9e>,所以,我怎麼能得到像40f42cf8fdf0752399a7eb6e2fccd0411b642e9e字符串這種格式的數據,沒有任何API來實現這個

+0

幾乎可以肯定,字典包含一個'CFData'對象,而不是一個'CFString'的關鍵。只需循環訪問其「字節」並將其打印爲2位十六進制字符串即可。 –

回答

0

經過一番搜索,finnaly我發現解決方案將CFData傳輸到帶有十六進制字符串的CFString。

static CFStringRef SecCopyHexStringFromData(CFDataRef data) 
{ 
    CFIndex ix, length; 
    const UInt8 *bytes; 
    CFMutableStringRef string; 

    if (data) { 
     length = CFDataGetLength(data); 
     bytes = CFDataGetBytePtr(data); 
    } else { 
     length = 0; 
     bytes = NULL; 
    } 
    string = CFStringCreateMutable(kCFAllocatorDefault, length * 2); 
    for (ix = 0; ix < length; ++ix) 
     CFStringAppendFormat(string, NULL, CFSTR("%02X"), bytes[ix]); 

    return string; 
} 

感謝Ken Thomases的意見

0

試試這個:

//copnvert CFStringRef into NSString 
NSString *aNSString = (NSString *)aCFString; 

NSCharacterSet *charactersToRemove = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; 
NSString *strippedReplacement = [[aNSString componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""]; 
NSLog(@"%@", strippedReplacement); 
+0

我用你的代碼,同時也有錯誤:***終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「 - [__ NSCFData componentsSeparatedByCharactersInSet:]:無法識別的選擇發送到實例0x100501480」 – jimwan

0

嘗試......

CFDictionaryRef information; 
CFStringRef value = CFDictionaryGetValue(information,xxxx); 
NSString *result = (NSString*)CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,(CFStringRef)value,CFSTR(""),kCFStringEncodingUTF8)); 
+0

我用你的代碼,並有這樣的錯誤: ***終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [__ NSCFData _fastCharacterContents]:無法識別的選擇發送到實例0x100210ba0' – jimwan

+0

修復此... http://stackoverflow.com/questions/12548961/nscfdata-fastcharactercontents -crash – Rahul

+0

試試這個.. NSData * data = [result dataUsingEncoding:NSUTF8StringEncoding]; – Rahul

相關問題