我正在尝试将GUID C ++结构转换为guid的字符串表示形式。 GUID结构定义如下:
typedef struct _GUID {
ul_u_long Data1;
ul_u_short Data2;
ul_u_short Data3;
ul_byte Data4[ 8 ];
} GUID;
我在将Data4转换为字符串时遇到问题。可在此处找到此结构的说明:http://msdn.microsoft.com/en-us/library/aa373931%28VS.85%29.aspx。根据描述,该字节数组的前2个字节表示一组4个十六进制数字,接下来的6个字节包含第二组12个十六进制数字。
因此,给定像这样的指南6B29FC40-CA47-1067-B31D-00DD010662DA,字节数组在前2个字节中存储 B31D ,在接下来的6个字节中存储 00DD010662DA 字节。
所以,以这个guid为例,并假设我有一个名为 ulguid 的GUID类型的变量,我想要做的是提取 B31D-00DD010662DA < / em>来自字节数组 ulguid.Data4 with objective-c ++。我该怎么做呢?
答案 0 :(得分:2)
此代码段应该有效:
#include <cstdio>
#include <iostream>
GUID ulguid = {
0x6B29FC40u, 0xCA47, 0x1067,
{0xB3, 0x1D, 0x00, 0xDD, 0x01, 0x06, 0x62, 0xDA}
};
// 36 characters for the GUID, plus the zero terminator.
char buffer[37];
sprintf(buffer, "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
ulguid.Data1, ulguid.Data2, ulguid.Data3,
ulguid.Data4[0], ulguid.Data4[1],
ulguid.Data4[2], ulguid.Data4[3],
ulguid.Data4[4], ulguid.Data4[5],
ulguid.Data4[6], ulguid.Data4[7]);
// Prints: 6B29FC40-CA47-1067-B31D-00DD010662DA
std::cout << buffer;