2015-09-26 84 views
0

我已經使用了這個md5,我得到了散列結果。但是,回報如下:<8f833933 03a151ea 33bf6e3e bbc28594>。對於swift來說是新的,所以我不完全確定它是否是封裝。我該如何擺脫越來越不符號?md5散列返回,封裝在swift中

+0

這意味着NSData對象使用其「description」方法打印。如果您搜索「NSData到十六進制字符串」,那麼你應該找到一些解決方案(例如:http://stackoverflow.com/a/29642198/1187415)。 –

回答

0

你可以從簽名看,該函數返回一個NSData對象:

func md5(#string: String) -> NSData 

如果你想將它轉換爲字符串,你需要對它進行編碼的人類可讀的格式。最常見的是十六進制表示法。

如果使用較新的雨燕2功能,從這個問題,它返回一個UINT8陣列

func md5(string string: String) -> [UInt8] { 
    var digest = [UInt8](count: Int(CC_MD5_DIGEST_LENGTH), repeatedValue: 0) 
    if let data = string.dataUsingEncoding(NSUTF8StringEncoding) { 
     CC_MD5(data.bytes, CC_LONG(data.length), &digest) 
    } 

    return digest 
} 

你可以使用這個方便toHex功能:

func toHex(bytes: [UInt8]) -> String { 
    var numbers = [String]() 
    for byte in bytes { 
     if byte < 0x10 { 
      numbers.append("0") 
     } 
     numbers.append(String(byte, radix: 16, uppercase: true)) 
    } 
    return numbers.joinWithSeparator("") 
} 

那麼這個返回一個字符串:

toHex(md5("Hello")) 

(在我看來,你應該總是喜歡純粹的Swift類型(arr )基礎類型(NSData)。)

+0

@ user3813647如果此答案已解決您的問題,請點擊複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – idmean