【问题标题】:size of boost uuid in string returns 36字符串中 boost uuid 的大小返回 36
【发布时间】:2011-07-05 10:43:23
【问题描述】:

我正在尝试使用 boost::uuid 生成 16 个字符的 uuid 字符串,但它返回 36 个字符。

boost::uuids::uuid uid == boost::random_generator()();
std::cout << size of uid:" << uid.size << std::endl; //always 16
std::stringstream ss;
ss<< uid;
std::string s = ss.str();
std::cout << "size of uid:" << s.size() << std::endl; // always 36

如何获得 16 个字符的 uuid 字符串?

【问题讨论】:

    标签: boost uuid boost-uuid


    【解决方案1】:

    根据the documentation,这段代码应该给你一个16个字符的字符串:

    #include <boost/uuid/uuid.hpp>            // uuid class
    #include <boost/uuid/uuid_generators.hpp> // generators
    #include <boost/uuid/uuid_io.hpp>         // streaming operators etc.
    boost::uuids::uuid uid = boost::random_generator()();
    std::string s(uid.size());
    std::copy(u.begin(), u.end(), s.begin());
    

    但它不是 ASCII 字符串,而是字节字符串。由于 ASCII 可以用 2 个十六进制字符表示字节,因此 ASCII 中的 UUID 有 32 个字符加上 4 个分隔符,36。所以你已经有了正确的代码:)

    【讨论】:

    • 我已经尝试过了,但它不会复制 ascii 字符。它有一些我无法打印的二进制字符。事件我试图在 std::hex 中打印但仍然无法读取/查看。尝试使用 std::out 打印。
    • 看我的编辑,你不能用 16 个 ASCII 字符表示 UUID
    • 我不确定为什么要添加 4 个分隔符,但将 unsigned char 转换为 char 确实需要 2 个字节,因此需要 32 个。
    • @rjoshi 它是 UUID 的标准 ASCII 表示 (en.wikipedia.org/wiki/Uuid)
    猜你喜欢
    • 2014-03-28
    • 2017-09-21
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2023-01-16
    相关资源
    最近更新 更多