首页 > 编程语言 >c++ string 转换成 guid

c++ string 转换成 guid

时间:2024-09-11 21:02:07浏览次数:9  
标签:std GUID string c++ 字符串 Data4 guid

 

 

在C++中,将一个字符串转换为GUID(Globally Unique Identifier)可以通过以下方法实现。GUID通常是128位(16字节)的标识符,以标准格式表示,例如:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。在C++中,常用的库之一是Windows API,它提供了处理GUID的相关功能。

这里是一个示例代码,将字符串转换为GUID:

#include <iostream>
#include <windows.h> // Windows API 头文件
#include <objbase.h> // CoCreateGuid 和 StringFromGUID2 等函数的头文件

// 自定义函数将字符串转换为 GUID
bool StringToGUID(const std::string& str, GUID& guid) {
    // 检查输入字符串的长度是否符合 GUID 的标准格式(36 字符)
    if (str.length() != 36) {
        return false;
    }
    
    WCHAR wstr[39]; // 用于存储带大括号的宽字符字符串
    swprintf_s(wstr, 39, L"{%S}", str.c_str()); // 将字符串转换为带大括号的宽字符字符串

    HRESULT hr = CLSIDFromString(wstr, &guid); // 尝试将字符串转换为 GUID
    return SUCCEEDED(hr); // 检查转换是否成功
}

int main() {
    std::string input = "550e8400-e29b-41d4-a716-446655440000"; // 示例字符串
    GUID guid;

    if (StringToGUID(input, guid)) {
        std::cout << "转换成功!" << std::endl;
        // 输出 GUID
        LPOLESTR guidString;
        StringFromCLSID(guid, &guidString); // 将 GUID 转换为字符串
        std::wcout << L"GUID: " << guidString << std::endl;
        CoTaskMemFree(guidString); // 释放分配的内存
    } else {
        std::cout << "转换失败,输入字符串格式错误。" << std::endl;
    }

    return 0;
}

  

 

c++ guid 转换成 string

 

#include <iostream>
#include <windows.h> // Windows API 头文件
#include <objbase.h> // CoCreateGuid 和 StringFromGUID2 等函数的头文件

// 自定义函数将 GUID 转换为 std::string
std::string GUIDToString(const GUID& guid) {
    char guid_cstr[39]; // 用于存储 GUID 字符串,包含终止符为39字节
    snprintf(guid_cstr, sizeof(guid_cstr),
             "%08x-%04x-%04x-%04x-%012llx",
             guid.Data1, guid.Data2, guid.Data3,
             (guid.Data4[0] << 8) | guid.Data4[1],
             (static_cast<unsigned long long>(guid.Data4[2]) << 40) |
             (static_cast<unsigned long long>(guid.Data4[3]) << 32) |
             (static_cast<unsigned long long>(guid.Data4[4]) << 24) |
             (static_cast<unsigned long long>(guid.Data4[5]) << 16) |
             (static_cast<unsigned long long>(guid.Data4[6]) << 8) |
             static_cast<unsigned long long>(guid.Data4[7]));

    return std::string(guid_cstr); // 返回 C++ 字符串
}

int main() {
    GUID guid;
    // 生成一个新的 GUID
    CoCreateGuid(&guid);

    // 将 GUID 转换为字符串
    std::string guidStr = GUIDToString(guid);
    std::cout << "GUID: " << guidStr << std::endl;

    return 0;
}

  

 

标签:std,GUID,string,c++,字符串,Data4,guid
From: https://www.cnblogs.com/rebrobot/p/18408993

相关文章

  • 【自用22.】C++类的静态数据成员以及静态成员函数
    需要获取总的人数,如何实现?方案一:使用全局变量,在构造函数中对这个全局变量进行修改具体代码如下:在Human.cpp中定义全局变量,并在构造函数中对人数进行增加操作#include"Human.h"#include<iostream>usingnamespacestd;intHumanCount=0;Human::Human(){ name......
  • C++复习day10
    智能指针为什么需要智能指针?#include<iostream>usingnamespacestd;intdiv(){ inta,b; cin>>a>>b; if(b==0) throwinvalid_argument("除0错误"); returna/b;}voidFunc(){ //1、如果p1这里new抛异常会如何? //2、如果p2这里new抛异常会......
  • C++ web框架:matt-42/lithium
    一、代码示例#include<lithium_http_server.hh>#include<lithium_pgsql.hh>#include"symbols.hh"usingnamespaceli;intmain(){//创建PostgreSQL数据库连接pgsql_databasedb=pgsql_database(s::host="localhost"......
  • C++中的数组,字符串数组,pair数组
    1.C++中的字符串数组: 2.C++中的常量数组 这个constpair<int,string>valueSymbols[]定义了一个常量数组,数组中的每个元素都是一个pair<int,string>类型的对象。pair是C++标准模板库(STL)中的一个模板类,用于将两个值组合成一个单一的对象。在这个特定的例子中,pair的第一个......
  • C++入门教程:第八篇 - 文件I/O操作
    C++入门教程:第八篇-文件I/O操作文件I/O(输入/输出)是程序与外部存储设备进行数据交换的关键操作。在C++中,文件I/O操作由标准库提供的流类完成。通过这些流类,程序可以读写文件,处理文件内容。本文将介绍C++中的文件I/O基础,包括如何打开、读写和关闭文件。1.文件流基础C++提......
  • C++ 虚析构函数简单测试
    classBase{public:virtual~Base(){cout<<"~Base"<<'\n';}};classDerived:publicBase{public:~Derived(){cout<<"~Derived"<<'\n';}};intmain(){{......
  • 【C++】vector常见用法
    ......
  • C++:类与对象——详解多态原理、虚函数和抽象类
    1.多态基本内容C++中的多态是面向对象编程的一个重要特性,指的是同一个函数或对象在不同的情况下可以表现出不同的行为。多态通常通过继承和虚函数来实现。它分为两种类型:编译时多态(静态多态)和运行时多态(动态多态)。多态分为两类:静态多态:函数重载和运算符重载属于静态......
  • 南沙C++信奥老师解一本通题: 1315:【例4.5】集合的划分
    ​ 【题目描述】【输入】给出n和k。【输出】n个元素a1,a2,……,an放入k个无标号盒子中去的划分数S(n,k)。【输入样例】106 【输出样例】22827 #include<iostream>usingnamespacestd;longlongSplit(intn,intplate)//等同于n个不同的数......
  • C++模拟实现stack和queue(容器适配器)
    适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。简单理解,将模板参数给成容器,就是容器适配器,写成参数的容器的各种接口,均满足需要。#include<list>#includ......