2014-08-29 139 views
0

一個UUID轉換我有一個保存這樣一個16個字節數據的UUID:如何拯救字節數組轉換爲字符串(C++)

unsigned char uuid[16]; //128-bits unique identifier 

,我想將其轉換爲一個的std :: string。我可以寫一個循環來思考所有字節並生成字符串,但我正在尋找一個更簡單/更快的解決方案。有沒有這樣的解決方案?

+0

什麼平臺? – trojanfoe 2014-08-29 10:12:00

+0

它是在Windows上,但有沒有解決方案是平臺獨立的? – mans 2014-08-29 10:13:44

+0

投票結束爲「不清楚你的要求」,因爲問題不明確。對「轉換爲字符串」這個問題提供了答案的人被拒絕了。對於回答這個問題的人來說,這絕對不公平。 – jww 2014-08-29 11:31:42

回答

1

如果你真的想避免一個循環,你總是可以這樣做:

char str[37] = {}; 
sprintf(str, 
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", 
    uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7], 
    uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15] 
); 

不是真的優雅,但我認爲這是你可以不循環,沒有平臺的依賴最好的。

0

basic_string的supplys此構造函數:

basic_string(const E *s, size_type n, const A& al = A()); 

所以,你可以做這樣的:

string strUuid(uuid, 16); 
+0

這不行!每個字符都應該轉換爲兩個十六進制值,然後附加到字符串中。 – mans 2014-08-29 10:15:41

+0

UUID字符串具有建立的格式,這不符合。 – trojanfoe 2014-08-29 10:15:53

+0

@mans - 你確實*沒有*指定你想要十六進制編碼。吳強給你提出了你問的問題的正確答案。如果你想要一個特定的編碼,那麼你需要在問題中指定它。他肯定不應該因爲回答這個問題而被低估。 – jww 2014-08-29 10:20:21

1

寫一個循環。對於每個字節,%#02x的snprintf。不要忘記傳統的破折號。

沒有與平臺無關的(即POSIX)API格式化UUID,所以這是最好的。

+0

我已經在我的問題中提出了這種方法,但我正在尋找更簡單/更快的解決方案。 – mans 2014-08-29 10:18:49

相關問題