如何将guid转换为* char

时间:2014-01-29 12:23:37

标签: visual-c++

我想在c ++中将CLSID转换为* char,这样我就可以在文本框中显示它。我是c ++的新手,所以请尽可能简单。

由于

4 个答案:

答案 0 :(得分:4)

C'ish解决方案:

/* 128 bit GUID to human-readable string */
char * guid_to_str(const GUID * id, char * out) {
    int i;
    char * ret = out;
    out += sprintf(out, "%.8lX-%.4hX-%.4hX-", id->Data1, id->Data2, id->Data3);
    for (i = 0; i < sizeof(id->Data4); ++i) {
        out += sprintf(out, "%.2hhX", id->Data4[i]);
        if (i == 1) *(out++) = '-';
    }
    return ret;
}

这假定输出缓冲区已经分配,​​并且应该是37字节的大小(包括空终止字符)。

输出格式为"75B22630-668E-11CF-A6D9-00AA0062CE6C"

用法示例:

GUID g;
char buffer[37];

std::cout << guid_to_str(&g, buffer);

注意:

这段代码的存在是因为我必须在Linux下实现GUID解析,否则我会使用@krowe提到的Windows API函数StringFromCLSID

答案 1 :(得分:3)

Here 是将GUID转换为字符串的一个很好的示例,反之亦然,我正在我的项目中使用:

std::string guidToString(GUID guid) {
    std::array<char,40> output;
    snprintf(output.data(), output.size(), "{%08X-%04hX-%04hX-%02X%02X-%02X%02X%02X%02X%02X%02X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
    return std::string(output.data());
}

GUID stringToGUID(const std::string& guid) {
    GUID output;
    const auto ret = sscanf(guid.c_str(), "{%8X-%4hX-%4hX-%2hX%2hX-%2hX%2hX%2hX%2hX%2hX%2hX}", &output.Data1, &output.Data2, &output.Data3, &output.Data4[0], &output.Data4[1], &output.Data4[2], &output.Data4[3], &output.Data4[4], &output.Data4[5], &output.Data4[6], &output.Data4[7]);
    if (ret != 11)
        throw std::logic_error("Unvalid GUID, format should be {00000000-0000-0000-0000-000000000000}");
    return output;
}

在示例中,它首先使用 char * 转换为字符串,因此这正是您正在寻找的有效方式。

答案 2 :(得分:2)

Windows API具有以下功能:

CLSID clsid;
HRESULT hr = CLSIDFromProgID ((OLESTR "Adobe.SVGCtl.3"),&clsid);

// Get class id as string
LPOLESTR className;
hr = StringFromCLSID(clsid, &className);

// convert to CString
CString c = (char *) (_bstr_t) className;

// then release the memory used by the class name
CoTaskMemFree(className);

// Now c is ready to use

答案 3 :(得分:1)

CLSID与UUID相同,因此您可以使用 UuidToString()功能

http://msdn.microsoft.com/en-us/library/windows/desktop/aa379352(v=vs.85).aspx