如何将保存在字节数组中的UUID转换为字符串(c++)

问题描述 投票:0回答:4

我有一个UUID,保存为一个16字节的数据,像这样。

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

我想把它转换成一个std: :string. 我也许可以写一个循环来思考所有字节并生成字符串,但我正在寻找一个更简单、更快速的解决方案。有没有这样的解决方案?

c++ guid uuid
4个回答
4
投票

如果你真的想避免循环,你总是可以做这样的事情。

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]
);

不是很优雅,但我认为这是最好的,你可以得到没有循环和没有平台依赖性。


1
投票

写一个循环。对于每一个字节,snprintf为%#02x。不要忘记传统的破折号。

没有独立于平台的(即POSIX)API来格式化UUIDs,所以这是你能得到的最好的。


1
投票

这个问题的答案是错误的。

根据 https:/en.wikipedia.orgwikiUniversally_unique_identifier#Format。

这是正确的代码。

char str[37] = {};
unsigned long data1 = *reinterpret_cast<unsigned long*>(uuid);
unsigned short data2 = *reinterpret_cast<unsigned short*>(uuid + 4);
unsigned short data3 = *reinterpret_cast<unsigned short*>(uuid + 6);
sprintf(str, 
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", 
    data1, data2, data3,
    uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]
);

0
投票

basic_string提供了这个构造函数

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

所以你可以这样做。

string strUuid(uuid, 16);
© www.soinside.com 2019 - 2024. All rights reserved.