打印 GUID 变量
我有一个 GUID 变量,我想在文本文件中写入其值。 GUID 定义是:
typedef struct _GUID { // size is 16
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
但我想这样写它的值:
CA04046D-0000-0000-0000-504944564944
我观察到:
Data1
保存 CA04046D 的十进制值Data2
保存 0 的十进制值Data3< /code> 保存下一个 0 的十进制值
,但是其他的呢?
我必须自己解释这个值才能获得该输出,或者是否有更直接的方法来打印这样的变量?
I have a GUID variable and I want to write inside a text file its value.
GUID definition is:
typedef struct _GUID { // size is 16
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
But I want to write its value like:
CA04046D-0000-0000-0000-504944564944
I observed that:
Data1
holds the decimal value for CA04046DData2
holds the decimal value for 0Data3
holds the decimal value for next 0
But what about the others?
I have to interpret myself this values in order to get that output or is there a more direct method to print such a variable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
使用 StringFromCLSID 函数将其转换为字符串
例如:
另请参阅 GUID 的 MSDN 定义< /a> 用于 data4 的描述,它是一个包含 GUID 最后 8 个字节的数组
Use the StringFromCLSID function to convert it to a string
e.g.:
Also see the MSDN definition of a GUID for a description of data4, which is an array containing the last 8 bytes of the GUID
有时自己动手很有用。我喜欢 fdioff 的答案,但它不太正确。有 11 个不同大小的元素。
有关 GUID 布局,请参阅 Guiddef.h。
同样,作为方法:
您也可以将 CLSID 传递给此方法。
Sometimes its useful to roll your own. I liked fdioff's answer but its not quite right. There are 11 elements of different sizes.
Refer to Guiddef.h for the GUID layout.
Same, as a method:
you can also pass a CLSID to this method.
您可以使用 StringFromGUID2() 消除对特殊字符串分配/解除分配的需要
You can eliminate the need for special string allocations/deallocations by using StringFromGUID2()
如果您更喜欢 C++ 方式
用法:
输出:
In case you prefer C++ way
Usage:
Output:
如果您的代码使用 ATL/MFC,您还可以使用
CComBSTR:来自
:atlbase.h
的 :CComBSTR(REFGUID guid)它将进行转换&自动清理内存。
In case when your code uses ATL/MFC you also could use
CComBSTR::CComBSTR(REFGUID guid)
fromatlbase.h
:It will make conversion & memory cleanup automatically.
受到 JustinB 的回答的启发
,然后
Inspired by JustinB's answer
and then
由 Google 的 Breakpad 项目提供:
Courtesy of google's breakpad project:
我知道这个问题很老了,但这可能有用吗?
I know the question is quite old, but would this work maybe?
使用 UuidToString 函数将 GUID 转换为字符串。该函数接受 UUID 类型,该类型是 GUID 的 typedef。
Use UuidToString function to convert GUID to string. The function accepts UUID type which is typedef of GUID.
对于那些使用 C++20 格式化库或 {fmt} 的人,这里是根据上述答案制作的
std::formatter
的快速实现:For those using C++20 formatting library, or {fmt}, here's a quick implementation of
std::formatter
made from the answers above:如果您无法使用 StringFromCLSID 或StringFromGUID2,可以直接格式化使用 C++20
std::format
的 GUID 。要将 GUID 转换为字符串:
或者只是打印,您可以直接重载流插入运算符:
If you cannot use StringFromCLSID or StringFromGUID2, you can directly format the GUID using C++20
std::format
.To convert a GUID to string:
Or for just printing, you can directly overload the stream insertion operator: