2014-08-29 137 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

相关问题