/** ================================* eli960@qq.com* http://linuxmail.cn/* 2024年02月18日* ================================*/#include "zcc/zcc_stdlib.h"#include <thread>#include <ctime>#include <mutex>#include <chrono>#include <iomanip>#include <sstream>#include <random>#include <string>#include <array>#include <chrono>zcc_namespace_begin;/*** @brief 构建一个唯一标识符字符串** 该函数通过结合当前时间的纳秒数、线程 ID 和一个自增计数器来生成唯一标识符。* 生成的标识符是一个字符串,包含时间戳、线程 ID 和计数器的信息。** @return std::string 生成的唯一标识符字符串*/std::string build_unique_id(){// 静态变量,初始化为当前时间的秒级时间戳,用于生成唯一标识符的计数器static int64_t _plus = second();// 线程局部静态变量,存储当前线程 ID 对 100000 取模的结果static thread_local int64_t _tid = get_thread_id() % 100000;// 获取当前计数器的值,并将计数器自增uint64_t plus = _plus++;// 获取当前的高精度时间点auto now = std::chrono::high_resolution_clock::now();// 计算从纪元开始到当前时间的纳秒数int64_t ns = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch()).count();// 用于存储格式化字符串的缓冲区char buf[32], buf2[32];// 将纳秒数格式化为 14 位十六进制字符串,前面补零,并在前面添加两个空格std::sprintf(buf, " %014zx", ns);// 将格式化后的字符串复制到结果字符串中std::string r = buf;// 交换字符串的前两个字符和最后两个字符r[0] = r[r.size() - 1];r[1] = r[r.size() - 2];// 移除字符串的最后两个字符r.resize(r.size() - 2);// 将线程 ID 格式化为 5 位十六进制字符串,前面补零std::sprintf(buf, "%05zx", _tid);// 将计数器的后三位格式化为 3 位十六进制字符串,前面补零std::sprintf(buf2, "%03zx", plus % 1000);// 将格式化后的计数器字符串的最后一个字符添加到结果字符串中r.push_back(buf2[2]);// 将格式化后的线程 ID 字符串添加到结果字符串中r.append(buf);// 将格式化后的计数器字符串的第二个字符添加到结果字符串中r.push_back(buf2[1]);// 将格式化后的计数器字符串的第一个字符添加到结果字符串中r.push_back(buf2[0]);return r;}std::string generate_uuid(){static std::random_device rd;static std::mt19937_64 gen(rd());// 生成16字节随机数据std::array<uint8_t, 16> bytes;for (auto &byte : bytes){byte = static_cast<uint8_t>(gen() & 0xFF);}// 设置UUID版本号 (v4)bytes[6] = (bytes[6] & 0x0F) | 0x40;// 设置UUID变体bytes[8] = (bytes[8] & 0x3F) | 0x80;// 格式化为标准UUID字符串std::string uuid;uuid.reserve(36);const char *hexDigits = "0123456789abcdef";for (size_t i = 0; i < 16; ++i){if (i == 4 || i == 6 || i == 8 || i == 10){uuid += '-';}uuid += hexDigits[(bytes[i] & 0xF0) >> 4];uuid += hexDigits[bytes[i] & 0x0F];}return uuid;}zcc_namespace_end;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型