C++怎么从char字符串转换成GUID格式

leleershi 2014-09-15 10:20:52
在C++中,有一个字符串的GUID形如:EF41A66B-25E1-46B2-964B-E4F70534807F
如何转换为GUID结构体类型
struct {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
...全文
873 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
田伟博 2016-08-17
  • 打赏
  • 举报
回复
得到的结果不对
赵4老师 2014-09-25
  • 打赏
  • 举报
回复
请15楼老弟睇睇: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
leleershi 2014-09-25
  • 打赏
  • 举报
回复
引用 9 楼 hhhh63 的回复:
[quote=引用 7 楼 leleershi 的回复:] 你是把GUID转成字符串,我是想把字符串转成GUID
	PSTR strGuid = "EF41A66B-25E1-46B2-964B-E4F70534807F";
	struct {
		unsigned long Data1;
		unsigned short Data2;
		unsigned short Data3;
		unsigned char Data4[8];
	} guid;

	sscanf_s(
	strGuid,
	"%08x-%04x-%04x-%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])
	);
再来一段,vc2010测试通过[/quote] 你这样不报错吗?内存溢出
hhhh63 2014-09-20
  • 打赏
  • 举报
回复
引用 7 楼 leleershi 的回复:
你是把GUID转成字符串,我是想把字符串转成GUID
	PSTR strGuid = "EF41A66B-25E1-46B2-964B-E4F70534807F";
	struct {
		unsigned long Data1;
		unsigned short Data2;
		unsigned short Data3;
		unsigned char Data4[8];
	} guid;

	sscanf_s(
	strGuid,
	"%08x-%04x-%04x-%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])
	);
再来一段,vc2010测试通过
赵4老师 2014-09-19
  • 打赏
  • 举报
回复
引用 4 楼 leleershi 的回复:
[quote=引用 3 楼 shen_wei 的回复:] HRESULT CLSIDFromString( LPOLESTR lpsz, LPCLSID pclsid);
EF41A66B-25E1-46B2-964B-E4F70534807F 这种中间有四个“-”分割的字符串可以用上面的方法,但是我的字符串是EF41A66B-25E1-46B2-964BE4F70534807F,中间只有三个“-”,这样调用CLSIDFromString得不到GUID,怎么办[/quote]
//EF41A66B-25E1-46B2-964B-E4F70534807F 这种中间有四个“-”分割的字符串可以用上面的方法,
//但是我的字符串是EF41A66B-25E1-46B2-964BE4F70534807F,中间只有三个“-”,这样调用CLSIDFromString得不到GUID,怎么办
#include <stdio.h>
char s[]="EF41A66B-25E1-46B2-964BE4F70534807F";
char d[80];
int main() {
    sprintf(d,"%.23s-%s",s,s+23);
    printf("[%s]\n",d);
    return 0;
}
//[EF41A66B-25E1-46B2-964B-E4F70534807F]
//
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
leleershi 2014-09-19
  • 打赏
  • 举报
回复
引用 6 楼 hhhh63 的回复:
	CString result;
	result.Format(_T("%08x-%04x-%04x-%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]);
不好意思,上面写错了,这个是正确的。
你是把GUID转成字符串,我是想把字符串转成GUID
hhhh63 2014-09-18
  • 打赏
  • 举报
回复
	CString result;
	result.Format(_T("%08x-%04x-%04x-%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]);
不好意思,上面写错了,这个是正确的。
hhhh63 2014-09-18
  • 打赏
  • 举报
回复
CString str; str.Format( L"%08X-%04X-%04X-%04X%08X", GUID.Data1, GUID.Data2, GUID.Data3, *(unsigned long *)(GUID.Data4 + 4), *(unsigned long *)(GUID.Data4) ); TRACE( "%s", str ); vc2010测试通过
leleershi 2014-09-18
  • 打赏
  • 举报
回复
引用 3 楼 shen_wei 的回复:
HRESULT CLSIDFromString( LPOLESTR lpsz, LPCLSID pclsid);
EF41A66B-25E1-46B2-964B-E4F70534807F 这种中间有四个“-”分割的字符串可以用上面的方法,但是我的字符串是EF41A66B-25E1-46B2-964BE4F70534807F,中间只有三个“-”,这样调用CLSIDFromString得不到GUID,怎么办
shen_wei 2014-09-16
  • 打赏
  • 举报
回复
HRESULT CLSIDFromString( LPOLESTR lpsz, LPCLSID pclsid);
边走边瞧 2014-09-15
  • 打赏
  • 举报
回复
参考1楼。。
Yofoo 2014-09-15
  • 打赏
  • 举报
回复
CLSIDFromString 具体参见MSDN

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧