c++ - 在 C++ 中生成缺少一些零的新 guid 字符串

标签 c++ windows visual-studio-2013

我尝试使用以下代码生成一个新的 36 个字符的 guid 字符串,但这有时只能打印 35 或 34 个字符。我想这是由于 guid 中的“零”造成的,但我无法清楚地看到原因。有什么办法可以解决这个问题吗?

#include <string>
#include <sstream>
#include <iostream>
#include <windows.h>
#include <iomanip>

int main()
{
    GUID guid;
    CoCreateGuid(&guid);
    std::ostringstream os;
    os.width(8);
    os << std::hex << std::setfill('0') << guid.Data1 << '-';
    os.width(4);
    os << std::hex << std::setfill('0') << guid.Data2 << '-';
    os.width(4);
    os << std::hex << std::setfill('0') << guid.Data3 << '-';
    os.width(2);
    os << std::hex << std::setfill('0')
        << static_cast<short>(guid.Data4[0])
        << static_cast<short>(guid.Data4[1])
        << '-'
        << static_cast<short>(guid.Data4[2])
        << static_cast<short>(guid.Data4[3])
        << static_cast<short>(guid.Data4[4])
        << static_cast<short>(guid.Data4[5])
        << static_cast<short>(guid.Data4[6])
        << static_cast<short>(guid.Data4[7]);

    std::string s(os.str());
    std::cout << s << std::endl;
    std::cout << s.length() << std::endl;
}

示例输出:

f6979589-b13c-416d-bf49-1497d99cd88
35
Press any key to continue . . .

最佳答案

您需要为您输出的任何新值直接设置字段大小,如下所示:

int main()
{
    GUID guid;
    CoCreateGuid(&guid);
    std::ostringstream os;
    os.width(8);
    os << std::hex << std::setfill('0') << guid.Data1 << '-';
    os.width(4);
    os << std::hex << std::setfill('0') << guid.Data2 << '-';
    os.width(4);
    os << std::hex << std::setfill('0') << guid.Data3 << '-';
    os.width(2);
    os << std::hex << std::setfill('0') << std::setw(2)
        << static_cast<short>(guid.Data4[0]) << std::setw(2)
        << static_cast<short>(guid.Data4[1])
        << '-' << std::setw(2)
        << static_cast<short>(guid.Data4[2]) << std::setw(2)
        << static_cast<short>(guid.Data4[3]) << std::setw(2)
        << static_cast<short>(guid.Data4[4]) << std::setw(2)
        << static_cast<short>(guid.Data4[5]) << std::setw(2)
        << static_cast<short>(guid.Data4[6]) << std::setw(2)
        << static_cast<short>(guid.Data4[7]);

    std::string s(os.str());
    std::cout << s << std::endl;
    std::cout << s.length() << std::endl;
}

关于c++ - 在 C++ 中生成缺少一些零的新 guid 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613764/

相关文章:

visual-studio-2013 - 升级到 Visual Studio 2013 后无法启动/调试 ASP.NET 网站

visual-studio - Visual Studio 2013 预览版和 Windows Azure 项目兼容性

C++运算符重载<<与 vector

python - (Python) 具有特殊字符的目录的问题

java - 如何从部署的网络应用程序访问本地文件系统上的文件?

c++ - 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

c# - Excel VSTO 加载项部署错误

c++ - 在 OpenCV 中将两个网络摄像头画面拼接在一起

c++ - 错误 C2440 : '=' : cannot convert from 'Node<ValueType> *' to 'Node<ValueType> *'

c++ - 删除tensorflow层