|
ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
|
工具函数命名空间。 More...
Namespaces | |
| namespace | mail_detail |
| 邮件发送的内部实现命名空间 | |
| namespace | name_detail |
| 类型名称处理的内部命名空间 | |
| namespace | rand_detail |
| 随机数生成的内部实现命名空间 | |
| namespace | time |
| 时间工具命名空间,提供时间相关的工具函数。 | |
Classes | |
| class | base64_impl |
| class | cmd |
| 命令分发器类。 More... | |
| class | consume |
| 资源消耗跟踪和耗时校验辅助工具 More... | |
| class | curl |
| HTTP客户端管理类(单例)。 More... | |
| class | email_sender |
| 邮件发送器类 More... | |
| class | enum2name |
| 双向枚举-名称注册表。 More... | |
| class | filterword |
| 敏感词过滤器 More... | |
| class | group |
| Actor分组管理类。 More... | |
| struct | has_pb_desc |
| 检查类型是否具有Protobuf descriptor()方法 More... | |
| struct | has_pb_desc< T, std::void_t< decltype(T::descriptor())> > |
| has_pb_desc 特化,检测 descriptor() 方法 More... | |
| struct | http_parm |
| HTTP请求参数结构体。 More... | |
| class | impl |
| Pimpl辅助包装类。 More... | |
| 检查类型是否为Protobuf消息类型 More... | |
| struct | mail_param |
| 邮件发送参数结构体。 More... | |
| struct | mail_payload_state |
| 邮件载荷传输状态 More... | |
| struct | nacnode |
| Aho-Corasick自动机Trie节点 More... | |
| class | nhash |
| 命名哈希码生成器。 More... | |
| struct | nhashcode |
| 命名哈希码结构体。 More... | |
| class | nwork |
| 单消费者工作队列。 More... | |
| struct | parm |
| 参数包装器模板。 More... | |
| class | pb_field |
| Protobuf字段反射辅助工具类 More... | |
| class | readfile |
| 文件读取类。 More... | |
| class | sem |
| 计数信号量封装类。 More... | |
| class | sleep |
| 线程休眠辅助类。 More... | |
| class | time_wheel |
| 时间轮定时器管理器 More... | |
| struct | time_wheel_config |
| 时间轮配置 More... | |
| class | twheel |
| 全局时间轮管理器 More... | |
| struct | varint_impl |
| Varint编码内部实现结构体 More... | |
| struct | varint_parm |
| varint编解码参数结构体 More... | |
| class | wheel |
| 时间轮轮次类 More... | |
| struct | wheel_node |
| 时间轮节点 More... | |
| struct | wheel_parm |
| 轮子类前向声明 More... | |
| class | writefile |
| 文件写入类。 More... | |
Typedefs | |
| template<typename ENUMT> | |
| using | em = enum2name<ENUMT> |
| enum2name的简写别名 | |
Enumerations | |
| enum | ENUM_MODE { ENUM_MODE_NULL , ENUM_MODE_HTTP , ENUM_MODE_HTTPS } |
| HTTP协议模式枚举。 More... | |
| enum | ENUM_TYPE { ENUM_TYPE_NULL , ENUM_TYPE_POST , ENUM_TYPE_GET } |
| HTTP请求方法枚举。 More... | |
| enum | { epb_mid = 1 } |
| Protobuf结构标识常量 More... | |
Functions | |
| bool | is_lanip (const std::string &aip) |
| 判断IP地址是否为局域网地址 | |
| int16_t | transformlittle (parm< int16_t > &avalues) |
| 将int16_t转换为小端字节序 | |
| uint16_t | transformlittle (parm< uint16_t > &avalues) |
| 将uint16_t转换为小端字节序 | |
| int32_t | transformlittle (parm< int32_t > &avalues) |
| 将int32_t转换为小端字节序 | |
| uint32_t | transformlittle (parm< uint32_t > &avalues) |
| 将uint32_t转换为小端字节序 | |
| int64_t | transformlittle (parm< int64_t > &avalues) |
| 将int64_t转换为小端字节序 | |
| uint64_t | transformlittle (parm< uint64_t > &avalues) |
| 将uint64_t转换为小端字节序 | |
| std::string | base64_encode (const char *adata, std::size_t alen) |
| 将二进制数据编码为Base64字符串 | |
| std::string | base64_encode (const std::string &astr) |
| 将字符串编码为Base64 | |
| std::string | base64_decode (const char *adata, std::size_t alen) |
| 将Base64字符串解码为二进制数据 | |
| std::string | base64_decode (const std::string &adata) |
| 将Base64字符串解码 | |
| bool | uuid_make (std::string &astr) |
| 生成UUID字符串 | |
| constexpr bool | islittle () |
| 判断当前系统是否为小端字节序。 | |
| template<typename T> | |
| bool | enc_base (char *abuf, int alen, const T *adata, int32_t acnt, int32_t *abytes) |
| 基础编码函数(模板) | |
| template<typename T> | |
| bool | dec_base (const char *abuf, int alen, int32_t *abytes, T *adata, int32_t acnt) |
| 基础解码函数(模板) | |
| bool | hex_get (unsigned char asrc, unsigned char &adst) |
| 十六进制字符转数值 | |
| void | hex_pair (unsigned char asrc, unsigned char &adst1, unsigned char &adst2) |
| 字节转十六进制字符对 | |
| bool | hex_byte (const unsigned char *asrc, unsigned char *adst) |
| 十六进制字符对转字节 | |
| int | varint_length (parm< int64_t > &avalues) |
| 计算64位整数的varint编码长度 | |
| int | varint_length (parm< int32_t > &avalues) |
| 计算32位整数的varint编码长度 | |
| bool | varint_encode (varint_parm< int64_t > &aparm) |
| 64位整数varint编码 | |
| bool | varint_encode (varint_parm< int32_t > &aparm) |
| 32位整数varint编码 | |
| bool | varint_decode (varint_parm< int64_t > &aparm) |
| 64位整数varint解码 | |
| bool | varint_decode (varint_parm< int32_t > &aparm) |
| 32位整数varint解码 | |
| int | to_hex (void *apso, int alen, void *apto) |
| 字节数组转十六进制字符串 | |
| bool | to_bytes (void *apso, int alen, void *apto, int &aout_len) |
| 十六进制字符串转字节数组 | |
| void | bytexor (char *ap, int32_t aplen, int apos) |
| XOR异或加密/解密 | |
| void | log_lex_err (const char *atotype, const char *afromtype, const char *aerror, const std::source_location &asource) |
| 记录lexical_cast类型转换失败的错误日志 | |
| template<typename TMAP, typename TKEY> | |
| auto | findmap (TMAP &amap, const TKEY &akey) |
| 在映射中查找元素。 | |
| template<typename TMAP, typename TKEY> | |
| auto | insertmap (TMAP &amap, const TKEY &akey, const typename TMAP::mapped_type &avalue) |
| 向映射中插入元素。 | |
| template<typename TMAP, typename TKEY> | |
| bool | erasemap (TMAP &amap, const TKEY &akey, typename TMAP::mapped_type &adata) |
| 从映射中提取并移除元素。 | |
| template<typename T> | |
| bool | proto2json (const T &adata, std::string &ajson) |
| 将Protobuf消息转换为JSON字符串。 | |
| template<typename T> | |
| void | print_json (const T &adata, bool aislog=false) |
| 打印Protobuf消息的JSON表示。 | |
| template<typename T> | |
| bool | json2proto (const std::string &ajson, T &adata) |
| 将JSON字符串转换为Protobuf消息。 | |
| template<typename T> | |
| bool | json2custom (const std::string &ajson, T &adata) |
| 将JSON字符串转换为自定义类型。 | |
| template<typename T> | |
| bool | custom2json (const T &adata, std::string &ajson) |
| 将自定义类型转换为JSON字符串。 | |
| template<typename TKEY, typename TVAL> | |
| void | copy (const std::map< TKEY, TVAL > &asrc, google::protobuf::Map< TKEY, TVAL > &adst) |
| 将std::map复制到Protobuf Map。 | |
| template<typename TKEY, typename TVAL> | |
| void | copy (const google::protobuf::Map< TKEY, TVAL > &asrc, std::map< TKEY, TVAL > &adst) |
| 将Protobuf Map复制到std::map。 | |
| template<typename To, typename From> | |
| To | lexical_cast (const From &afrom, const std::source_location &asource=std::source_location::current()) |
| 类型安全的lexical_cast实现。 | |
| template<typename To, typename From> | |
| bool | try_lexical_cast (const From &afrom, To &ato, const std::source_location &asource=std::source_location::current()) |
| 安全的lexical_cast实现,不抛出异常。 | |
| std::string | make_request_url (const http_parm &ahttp) |
| 构建完整的HTTP请求URL | |
| void | test_mail (const char *atitle, const char *acontent, const std::vector< std::pair< std::string, std::string > > &amailvec) |
| 测试邮件发送功能 | |
| void | test_manage_curl () |
| 测试HTTP请求功能 | |
| void | test_filterword () |
| 敏感词过滤功能测试函数 | |
| std::string | md5 (const std::string &atext) |
| 计算字符串的MD5哈希值 | |
| std::string | sh1 (std::string_view atext) |
| 计算字符串的SHA1哈希值 | |
| std::string | hmac_sha1 (const std::string &akey, const std::string &atext) |
| 计算HMAC-SHA1消息认证码 | |
| std::string & | type_name_handle (std::string &aname) |
| 处理C++类型名称,使其更易读 | |
| std::vector< const char * > | split_str (char *apbuff, int32_t abuff_cnt) |
| 按逗号分割字符缓冲区 | |
| bool | bit (int32_t atype, int32_t acjson) |
| 检查指定位是否被设置 | |
| std::strong_ordering | less_member () |
| 比较成员的递归终止函数 | |
| void | erase_repeat (std::string &astr, char ach) |
| 删除字符串中连续的重复字符 | |
| std::string_view | trim_ascii_spaces (std::string_view avalue) |
| 去除字符串首尾的ASCII空格 | |
| std::size_t | strlen (const char *astr) |
| 安全的字符串长度计算 | |
| template<typename T> | |
| std::string & | type_name () |
| 获取类型的字符串表示 | |
| template<std::size_t N> | |
| void | split_str (char *apbuff, int32_t abuff_cnt, std::array< const char *, N > &aarr) |
| 分割字符串到固定大小数组 | |
| template<typename T> | |
| auto | less_member (const T &alhs, const T &arhs) |
| 单成员三路比较 | |
| template<typename T, typename... TARGS> | |
| auto | less_member (const T &alhs, const T &arhs, const TARGS &... amems) |
| 多成员三路比较 | |
| bool | splite (const char *abuff, const char *afg, std::vector< std::string > &avec) |
| 按分隔符拆分C字符串到vector | |
| bool | splicing (const std::vector< std::string > &avec, const char *afg, std::string &astr, int32_t apos) |
| 将vector中的字符串用分隔符拼接 | |
| bool | splite (int32_t aindex, const std::vector< std::string > &avec, std::vector< std::string > &adata) |
| 从指定索引开始提取子vector | |
| bool | splicing (const std::set< std::string > &aset, const char *afg, std::string &astr) |
| 将set中的字符串用分隔符拼接 | |
| template<typename T> | |
| bool | splite (const char *abuff, const char *afg, std::vector< T > &avec) |
| template<typename T> | |
| bool | splite (const char *abuff, const char *afg, std::set< T > &aset) |
| template<typename T> | |
| bool | splite (int32_t aindex, const std::vector< std::string > &avec, T &adata) |
| template<typename T> | |
| bool | splite (int32_t aindex, const std::vector< std::string > &avec, std::vector< T > &adata) |
| template<std::size_t... INDEX, typename TTUPLE> | |
| bool | splite_tuple (std::index_sequence< INDEX... >, const std::vector< std::string > &avec, TTUPLE &atup) |
| template<std::size_t... INDEX, typename... ARGS> | |
| bool | splite (std::index_sequence< INDEX... >, const char *abuff, const char *afg, ARGS &... aargs) |
| template<typename... ARGS> | |
| bool | splite (const char *abuff, const char *afg, ARGS &... aargs) |
| template<typename TFIRST = std::string, typename TSECOND = std::string> | |
| bool | splite_special (const char *astr, const char *akey1, const char *akey2, std::vector< std::pair< TFIRST, TSECOND > > &avec) |
| template<typename TFIRST = std::string, typename TSECOND = std::string> | |
| bool | splite_special (const char *astr, const char *akey1, const char *akey2, std::map< TFIRST, TSECOND > &amap) |
| template<typename T> | |
| bool | splicing (const std::vector< T > &avec, const char *afg, std::string &astr, const std::function< std::string(const T &)> &afun=m_splicing< T >) |
| template<typename T> | |
| bool | splicing (const std::set< T > &avec, const char *afg, std::string &astr, const std::function< std::string(const T &)> &afun=m_splicing< T >) |
| template<typename TKEY, typename TVAL> | |
| bool | splicing (const std::map< TKEY, TVAL > &amap, const char *afg, std::string &astr, const std::function< std::string(const TKEY &, const TVAL &)> &afun=m_splicingmap< TKEY, TVAL >) |
| template<typename TKEY, typename TVAL> | |
| bool | splicing (const google::protobuf::Map< TKEY, TVAL > &amap, const char *afg, std::string &astr, const std::function< std::string(const TKEY &, const TVAL &)> &afun=m_splicingmap< TKEY, TVAL >) |
| template<typename T> | |
| bool | splicing (int32_t aindex, const char *afg, std::string &astr, T &adata) |
| template<std::size_t... INDEX, typename... ARGS> | |
| bool | splicing (std::index_sequence< INDEX... >, const char *afg, std::string &astr, ARGS &... aargs) |
| template<typename... ARGS> | |
| bool | splicing (const char *afg, std::string &astr, ARGS &... aargs) |
| std::string | time2str (int autc, const char *aformat) |
| 将UTC时间戳转换为格式化字符串 | |
| const std::string & | server_name () |
| 获取当前服务器名称 | |
| int | rand () |
| 生成随机整数 | |
| bool | directories_exists (const std::string &apath) |
| 检查目录是否存在 | |
| bool | file_exists (const std::string &apath) |
| 检查文件是否存在 | |
| bool | create_dir (const std::string &apath) |
| 创建目录(包括父目录) | |
| bool | file_remove (const std::string &afile) |
| 删除文件 | |
| void | dir (const std::string &apath, std::vector< std::string > &afiles, bool aiter) |
| 获取目录下的所有文件 | |
| void | no_core_dump (bool anocreate) |
| 终止程序(用于致命错误) | |
| std::function< void()> | send_mail (const std::string &acontent, bool asynchronize) |
| 创建邮件发送函数 | |
| int64_t | nguidstr2int64 (const char *anguid) |
| 将GUID字符串转换为int64_t | |
| bool | wasscii2asscii (const std::wstring &awstr, std::string &astr) |
| 将宽字符串(wstring)转换为多字节ASCII字符串 | |
| bool | asscii2wasscii (const std::string &astr, std::wstring &awstr) |
| 将多字节ASCII字符串转换为宽字符串(wstring) | |
| bool | wasscii2utf8 (const std::wstring &awstr, std::string &astr) |
| 将宽字符串(wstring)转换为UTF-8字符串 | |
| bool | utf82wasscii (const std::string &astr, std::wstring &awstr) |
| 将UTF-8字符串转换为宽字符串(wstring) | |
| bool | to_asscii (const std::string &astr1, std::string &astr2) |
| 将UTF-8字符串转换为多字节ASCII字符串 | |
| bool | to_utf8 (const std::string &astr1, std::string &astr2) |
| 将多字节ASCII字符串转换为UTF-8字符串 | |
| int32_t | utf8firstbyte (uint8_t afirst) |
| 获取UTF-8编码第一个字节的字节数 | |
| bool | isutf8 (const std::string &astr) |
| 检查字符串是否为有效的UTF-8编码 | |
| bool | isincludeutf8mb4 (const std::string &astr) |
| 检查UTF-8字符串是否包含4字节字符(UTF-8mb4) | |
| void | sregex (const std::string &apattern, const std::string &adata, const std::function< void(std::string &)> &afun) |
| 使用正则表达式查找所有匹配的子串 | |
| void | smatch (const std::string &aexpr, const std::string &adata, const std::function< void(std::smatch &)> &afun) |
| 使用正则表达式查找所有匹配并获取捕获组 | |
| void | replace (const std::string &aexpr, const std::string &arepl, const std::string &adata, std::string &aret) |
| 使用正则表达式替换字符串 | |
| std::string | char2hex (char adec) |
| 将单个字符转换为两位十六进制字符串 | |
| std::string | url_encode (const std::string &astr) |
| URL编码字符串 | |
| std::string | url_decode (const std::string &astr) |
| URL解码字符串 | |
| std::vector< std::string_view > | get_line (const char *apbuff, std::size_t abuff_sz) |
| 按行分割字符缓冲区 | |
| bool | isnumber (const std::string &anum) |
| 检查字符串是否全部由数字组成 | |
| void | transform_tolower (std::string &adata) |
| 将字符串转换为小写 | |
| void | transform_toupper (std::string &adata) |
| 将字符串转换为大写 | |
Variables | |
| template<typename TAG, typename TKEY, typename ... ARG> | |
| std::map< TKEY, std::function< void(ARG...)> > | cmd< TAG, TKEY, ARG... >::m_fun |
| 静态成员定义:命令映射表 | |
| template<typename ENUMT> | |
| std::map< int, std::map< ENUMT, typename enum2name< ENUMT >::data > > | enum2name< ENUMT >::m_datae2n |
| 静态成员定义:枚举值→名称映射表 | |
| template<typename ENUMT> | |
| std::map< int, std::map< std::string, ENUMT > > | enum2name< ENUMT >::m_datan2e |
| 静态成员定义:名称→枚举值映射表 | |
| template<typename T> | |
| std::function< std::string(const T &)> | m_splicing |
| template<typename TKEY, typename TVAL> | |
| std::function< std::string(const TKEY &, const TVAL &)> | m_splicingmap |
工具函数命名空间。
包含各种实用的工具函数和模板,用于简化常见的编程任务。
| bool ngl::tools::asscii2wasscii | ( | const std::string & | astr, |
| std::wstring & | awstr ) |
将多字节ASCII字符串转换为宽字符串(wstring)
ASCII字符串转换为宽字符(wchar_t)。
| astr | 源ASCII字符串 |
| awstr | [out] 存储转换结果的宽字符串 |
使用std::codecvt进行编码转换
| astr | 输入ASCII字符串 |
| awstr | 输出宽字符串 |
| std::string ngl::tools::base64_decode | ( | const char * | adata, |
| std::size_t | alen ) |
将Base64字符串解码为二进制数据
将Base64字符串解码为数据。
| adata | Base64编码的数据指针 |
| alen | 数据长度 |
自动处理'='填充字符 遇到无效字符会提前终止解码
| adata | Base64编码的数据 |
| alen | 数据长度 |
| std::string ngl::tools::base64_decode | ( | const std::string & | adata | ) |
将Base64字符串解码
将Base64字符串解码为字符串。
| adata | Base64编码的字符串 |
| adata | Base64编码的字符串 |
| std::string ngl::tools::base64_encode | ( | const char * | adata, |
| std::size_t | alen ) |
将二进制数据编码为Base64字符串
将数据编码为Base64字符串。
| adata | 源数据指针 |
| alen | 源数据长度 |
使用RFC 4648标准的Base64编码 每3个字节编码为4个字符,不足时用'='填充
| adata | 要编码的数据 |
| alen | 数据长度 |
| std::string ngl::tools::base64_encode | ( | const std::string & | astr | ) |
将字符串编码为Base64
将字符串编码为Base64字符串。
| astr | 源字符串 |
| astr | 要编码的字符串 |
| bool ngl::tools::bit | ( | int32_t | atype, |
| int32_t | acjson ) |
检查指定位是否被设置
检查指定位是否设置
| atype | 要检查的值 |
| acjson | 位掩码 |
| atype | 位掩码值 |
| acjson | 要检查的位位置 |
| void ngl::tools::bytexor | ( | char * | ap, |
| int32_t | aplen, | ||
| int | apos ) |
XOR异或加密/解密
对字节数组进行异或操作
使用配置的密钥对数据进行循环XOR异或操作
| ap | 待处理的数据缓冲区(原地修改) |
| aplen | 数据长度(字节数) |
| apos | 数据在整体流中的起始偏移量(用于确定密钥起始位置) |
| ap | 字节数组指针 |
| aplen | 数组长度 |
| apos | 起始位置偏移 |
从指定位置开始,对数组中的每个字节与位置索引进行异或操作。 常用于简单的数据混淆或校验。
| std::string ngl::tools::char2hex | ( | char | adec | ) |
将单个字符转换为两位十六进制字符串
将字符转换为十六进制字符串。
| adec | 要转换的字符 |
使用预定义的十六进制查找表
| adec | 输入字符 |
| void ngl::tools::copy | ( | const google::protobuf::Map< TKEY, TVAL > & | asrc, |
| std::map< TKEY, TVAL > & | adst ) |
将Protobuf Map复制到std::map。
| TKEY | 键类型 |
| TVAL | 值类型 |
| asrc | 源Protobuf Map |
| adst | 目标std::map |
| void ngl::tools::copy | ( | const std::map< TKEY, TVAL > & | asrc, |
| google::protobuf::Map< TKEY, TVAL > & | adst ) |
将std::map复制到Protobuf Map。
| TKEY | 键类型 |
| TVAL | 值类型 |
| asrc | 源std::map |
| adst | 目标Protobuf Map |
| bool ngl::tools::create_dir | ( | const std::string & | apath | ) |
创建目录(包括父目录)
创建目录
| apath | 目录路径 |
如果目录已存在,检查是否为目录 否则递归创建所有父目录
| apath | 目录路径 |
支持递归创建多级目录。
| bool ngl::tools::custom2json | ( | const T & | adata, |
| std::string & | ajson ) |
将自定义类型转换为JSON字符串。
| T | 自定义类型 |
| adata | 要转换的数据 |
| ajson | 输出参数,存储JSON字符串 |
| bool ngl::tools::dec_base | ( | const char * | abuf, |
| int | alen, | ||
| int32_t * | abytes, | ||
| T * | adata, | ||
| int32_t | acnt ) |
基础解码函数(模板)
从缓冲区直接复制数据(字节序不变)
| T | 数据类型 |
| abuf | 输入缓冲区 |
| alen | 输入缓冲区可用长度(字节数) |
| abytes | [in/out] 已使用字节数,解码后累加 |
| adata | 输出数据指针 |
| acnt | 输出数据元素个数 |
| true | 解码成功 |
| false | 参数错误或缓冲区不足 |
| void ngl::tools::dir | ( | const std::string & | apath, |
| std::vector< std::string > & | afiles, | ||
| bool | aiter ) |
获取目录下的所有文件
遍历目录获取文件列表
| apath | 目录路径 |
| afiles | [out] 存储文件路径的vector |
| aiter | 是否递归遍历子目录 |
跳过权限拒绝的目录,只收集常规文件 使用string存储路径便于序列化
| apath | 目录路径 |
| afiles | 输出文件列表 |
| aiter | 是否递归遍历子目录,默认为false |
| bool ngl::tools::directories_exists | ( | const std::string & | apath | ) |
检查目录是否存在
| apath | 目录路径 |
使用std::error_code避免异常
| apath | 目录路径 |
| bool ngl::tools::enc_base | ( | char * | abuf, |
| int | alen, | ||
| const T * | adata, | ||
| int32_t | acnt, | ||
| int32_t * | abytes ) |
基础编码函数(模板)
将数据直接复制到缓冲区(字节序不变)
| T | 数据类型 |
| abuf | 输出缓冲区 |
| alen | 输出缓冲区长度(字节数) |
| adata | 待编码数据指针 |
| acnt | 待编码数据元素个数 |
| abytes | [in/out] 已使用字节数,编码后累加 |
| true | 编码成功 |
| false | 参数错误或缓冲区不足 |
| void ngl::tools::erase_repeat | ( | std::string & | astr, |
| char | ach ) |
删除字符串中连续的重复字符
删除字符串中的重复字符
| astr | [in/out] 要处理的字符串 |
| ach | 要去重的字符 |
使用STL的unique算法,将连续的重复字符压缩为单个
| astr | 输入/输出字符串 |
| ach | 要删除的字符 |
删除字符串中连续出现的指定字符,只保留第一个。
| bool ngl::tools::erasemap | ( | TMAP & | amap, |
| const TKEY & | akey, | ||
| typename TMAP::mapped_type & | adata ) |
从映射中提取并移除元素。
| TMAP | 映射类型 |
| TKEY | 键类型 |
| amap | 映射引用 |
| akey | 要移除的键 |
| adata | 输出参数,存储移除的值 |
| bool ngl::tools::file_exists | ( | const std::string & | apath | ) |
检查文件是否存在
| apath | 文件路径 |
使用std::error_code避免异常
| apath | 文件路径 |
| bool ngl::tools::file_remove | ( | const std::string & | afile | ) |
删除文件
| afile | 文件路径 |
使用std::error_code避免异常
| afile | 文件路径 |
| auto ngl::tools::findmap | ( | TMAP & | amap, |
| const TKEY & | akey ) |
在映射中查找元素。
| TMAP | 映射类型 |
| TKEY | 键类型 |
| amap | 映射引用 |
| akey | 要查找的键 |
| std::vector< std::string_view > ngl::tools::get_line | ( | const char * | apbuff, |
| std::size_t | abuff_sz ) |
按行分割字符缓冲区
按行分割字符串。
| apbuff | 源字符缓冲区 |
| abuff_sz | 缓冲区大小 |
支持\r
换行符,使用string_view避免内存拷贝
| apbuff | 输入缓冲区 |
| abuff_sz | 缓冲区大小 |
| bool ngl::tools::hex_byte | ( | const unsigned char * | asrc, |
| unsigned char * | adst ) |
十六进制字符对转字节
将两个十六进制字符转换为一个字节
| asrc | 输入的两个十六进制字符数组 |
| adst | [out] 转换后的字节 |
| true | 转换成功 |
| false | 参数错误或包含无效的十六进制字符 |
| bool ngl::tools::hex_get | ( | unsigned char | asrc, |
| unsigned char & | adst ) |
十六进制字符转数值
将单个十六进制字符(0-9, a-f)转换为对应的数值(0-15)
| asrc | 十六进制字符 |
| adst | [out] 转换后的数值(0-15) |
| true | 转换成功 |
| false | 输入字符不是有效的十六进制字符 |
| void ngl::tools::hex_pair | ( | unsigned char | asrc, |
| unsigned char & | adst1, | ||
| unsigned char & | adst2 ) |
字节转十六进制字符对
将单个字节转换为两个十六进制字符
| asrc | 待转换的字节(0-255) |
| adst1 | [out] 高4位对应的十六进制字符 |
| adst2 | [out] 低4位对应的十六进制字符 |
| std::string ngl::tools::hmac_sha1 | ( | const std::string & | akey, |
| const std::string & | atext ) |
计算HMAC-SHA1消息认证码
计算HMAC-SHA1消息认证码。
| akey | 密钥 |
| atext | 要认证的消息 |
使用RFC 2104标准的HMAC算法 用于消息认证和完整性校验
| akey | 密钥 |
| atext | 输入文本 |
| auto ngl::tools::insertmap | ( | TMAP & | amap, |
| const TKEY & | akey, | ||
| const typename TMAP::mapped_type & | avalue ) |
向映射中插入元素。
| TMAP | 映射类型 |
| TKEY | 键类型 |
| amap | 映射引用 |
| akey | 要插入的键 |
| avalue | 要插入的值 |
| bool ngl::tools::is_lanip | ( | const std::string & | aip | ) |
判断IP地址是否为局域网地址
判断IP地址是否为局域网地址。
| aip | IPv4地址字符串 |
检查以下局域网地址段:
| aip | IP地址字符串 |
| bool ngl::tools::isincludeutf8mb4 | ( | const std::string & | astr | ) |
检查UTF-8字符串是否包含4字节字符(UTF-8mb4)
检查字符串是否包含UTF-8四字节字符(emoji等)。
| astr | 要检查的UTF-8字符串 |
遍历所有UTF-8字符,检查是否有码点>0xFFFF的字符 用于MySQL等数据库的utf8mb4兼容性检查
| astr | 输入字符串 |
|
constexpr |
判断当前系统是否为小端字节序。
| bool ngl::tools::isnumber | ( | const std::string & | anum | ) |
检查字符串是否全部由数字组成
检查字符串是否为纯数字。
| anum | 要检查的字符串 |
| anum | 输入字符串 |
| bool ngl::tools::isutf8 | ( | const std::string & | astr | ) |
检查字符串是否为有效的UTF-8编码
检查字符串是否为合法UTF-8编码。
| astr | 要检查的字符串 |
使用utf8cpp库的is_valid函数进行验证
| astr | 输入字符串 |
| bool ngl::tools::json2custom | ( | const std::string & | ajson, |
| T & | adata ) |
将JSON字符串转换为自定义类型。
| T | 自定义类型 |
| ajson | JSON字符串 |
| adata | 输出参数,存储转换后的数据 |
| bool ngl::tools::json2proto | ( | const std::string & | ajson, |
| T & | adata ) |
将JSON字符串转换为Protobuf消息。
| T | Protobuf消息类型 |
| ajson | JSON字符串 |
| adata | 输出参数,存储转换后的Protobuf消息 |
| std::strong_ordering ngl::tools::less_member | ( | ) |
比较成员的递归终止函数
三路比较终止函数
用于可变参数模板递归比较的终止条件
用于 less_member 模板递归的终止条件。
| auto ngl::tools::less_member | ( | const T & | alhs, |
| const T & | arhs ) |
单成员三路比较
| T | 成员类型 |
| alhs | 左操作数 |
| arhs | 右操作数 |
| auto ngl::tools::less_member | ( | const T & | alhs, |
| const T & | arhs, | ||
| const TARGS &... | amems ) |
多成员三路比较
| T | 第一个成员类型 |
| TARGS | 其余成员类型 |
| alhs | 左操作数第一个成员 |
| arhs | 右操作数第一个成员 |
| amems | 其余成员参数包 |
按参数顺序逐个比较成员,返回第一个不相等的比较结果。
| To ngl::tools::lexical_cast | ( | const From & | afrom, |
| const std::source_location & | asource = std::source_location::current() ) |
类型安全的lexical_cast实现。
使用boost::lexical_cast进行类型转换,并添加额外的安全检查。
| To | 目标类型 |
| From | 源类型 |
| afrom | 要转换的值 |
| asource | 源代码位置,默认为当前调用位置 |
| boost::bad_lexical_cast | 转换失败时抛出异常 |
| void ngl::tools::log_lex_err | ( | const char * | atotype, |
| const char * | afromtype, | ||
| const char * | aerror, | ||
| const std::source_location & | asource ) |
记录lexical_cast类型转换失败的错误日志
记录lexical_cast错误日志。
| atotype | 目标类型名称 |
| afromtype | 源类型名称 |
| aerror | 错误描述信息 |
| asource | 调用位置信息(自动捕获) |
当lexical_cast转换失败时,记录详细的错误信息包括 源类型、目标类型、错误原因和调用位置
| atotype | 目标类型名称 |
| afromtype | 源类型名称 |
| aerror | 错误信息 |
| asource | 源代码位置 |
| std::string ngl::tools::make_request_url | ( | const http_parm & | ahttp | ) |
构建完整的HTTP请求URL
将基础URL和查询参数拼接为完整URL
| ahttp | HTTP请求参数 |
| std::string ngl::tools::md5 | ( | const std::string & | atext | ) |
计算字符串的MD5哈希值
计算字符串的MD5摘要。
| atext | 要计算哈希的字符串 |
使用RFC 1321标准的MD5算法
| atext | 输入文本 |
| int64_t ngl::tools::nguidstr2int64 | ( | const char * | anguid | ) |
将GUID字符串转换为int64_t
将GUID字符串转换为64位整数
| anguid | GUID字符串(格式:"类型#区域#数据ID") |
如果anguid为nullptr或格式无效,生成新的GUID 使用"#"作为分隔符解析类型、区域和数据ID
| anguid | GUID字符串 |
用于将字符串格式的GUID转换为数值类型便于存储和比较。
| void ngl::tools::no_core_dump | ( | bool | anocreate | ) |
终止程序(用于致命错误)
禁用核心转储
| anocreate | 是否不创建核心转储,默认为false |
当anocreate为false时调用std::abort() 用于不可恢复的错误情况
| anocreate | 是否禁止创建核心转储文件,默认为false |
用于生产环境防止敏感信息泄露。
| void ngl::tools::print_json | ( | const T & | adata, |
| bool | aislog = false ) |
打印Protobuf消息的JSON表示。
| T | Protobuf消息类型 |
| adata | 要打印的Protobuf消息 |
| aislog | 是否使用日志输出 |
将Protobuf消息转换为JSON字符串并打印到错误日志。
| T | Protobuf消息类型 |
| adata | 要打印的Protobuf消息 |
| aislog | 是否使用日志输出(当前未使用) |
| bool ngl::tools::proto2json | ( | const T & | adata, |
| std::string & | ajson ) |
将Protobuf消息转换为JSON字符串。
| T | Protobuf消息类型 |
| adata | 要转换的Protobuf消息 |
| ajson | 输出参数,存储JSON字符串 |
| int ngl::tools::rand | ( | ) |
生成随机整数
生成随机数
使用线程本地的MT19937_64引擎,确保线程安全 每个线程有独立的随机数生成器实例
| void ngl::tools::replace | ( | const std::string & | aexpr, |
| const std::string & | arepl, | ||
| const std::string & | adata, | ||
| std::string & | aret ) |
使用正则表达式替换字符串
使用正则表达式替换字符串。
| aexpr | 正则表达式模式 |
| arepl | 替换字符串(可包含反向引用$1,$2等) |
| adata | 源字符串 |
| aret | [out] 存储替换结果的字符串 |
使用std::regex_replace进行全局替换
| aexpr | 正则表达式 |
| arepl | 替换字符串 |
| adata | 输入数据 |
| aret | 输出结果 |
| std::function< void()> ngl::tools::send_mail | ( | const std::string & | acontent, |
| bool | asynchronize ) |
创建邮件发送函数
发送邮件
| acontent | 邮件内容 |
| asynchronize | 是否异步发送,默认为true |
返回的函数具有以下特性:
| acontent | 邮件内容 |
| asynchronize | 是否异步发送,默认为true |
返回一个可调用对象,调用时执行实际的邮件发送操作。
| const std::string & ngl::tools::server_name | ( | ) |
获取当前服务器名称
获取服务器名称
从ttab_servers配置表获取
| std::string ngl::tools::sh1 | ( | std::string_view | atext | ) |
计算字符串的SHA1哈希值
计算字符串的SHA1摘要。
| atext | 要计算哈希的字符串 |
使用FIPS 180-4标准的SHA1算法
| atext | 输入文本 |
| void ngl::tools::smatch | ( | const std::string & | aexpr, |
| const std::string & | adata, | ||
| const std::function< void(std::smatch &)> & | afun ) |
使用正则表达式查找所有匹配并获取捕获组
使用正则表达式匹配字符串并对匹配结果执行回调。
| aexpr | 正则表达式模式 |
| adata | 要搜索的源数据 |
| afun | 匹配结果的回调函数(包含捕获组) |
遍历所有匹配项,对每个匹配的smatch对象调用回调
| aexpr | 正则表达式 |
| adata | 输入数据 |
| afun | 匹配结果回调函数(接收smatch对象) |
| bool ngl::tools::splicing | ( | const std::set< std::string > & | aset, |
| const char * | afg, | ||
| std::string & | astr ) |
将set中的字符串用分隔符拼接
| aset | 源字符串set |
| afg | 分隔符字符串 |
| astr | [out] 存储拼接结果的字符串 |
预计算总长度并reserve,避免多次内存分配 set保证元素有序且唯一
| bool ngl::tools::splicing | ( | const std::vector< std::string > & | avec, |
| const char * | afg, | ||
| std::string & | astr, | ||
| int32_t | apos ) |
将vector中的字符串用分隔符拼接
| avec | 源字符串vector |
| afg | 分隔符字符串 |
| astr | [out] 存储拼接结果的字符串 |
| apos | 起始索引,默认为0 |
从apos位置开始拼接,每个元素之间插入分隔符 预分配内存避免多次重新分配
| std::vector< const char * > ngl::tools::split_str | ( | char * | apbuff, |
| int32_t | abuff_cnt ) |
按逗号分割字符缓冲区
分割字符串为子串数组
| apbuff | 源字符缓冲区(会被修改) |
| abuff_cnt | 缓冲区长度 |
将逗号替换为'\0',返回指向各子串的指针 会跳过逗号后的空格
| apbuff | 输入字符串缓冲区(会被修改) |
| abuff_cnt | 缓冲区长度 |
使用逗号作为分隔符,支持空格跳过。
| void ngl::tools::split_str | ( | char * | apbuff, |
| int32_t | abuff_cnt, | ||
| std::array< const char *, N > & | aarr ) |
分割字符串到固定大小数组
| N | 数组大小 |
| apbuff | 输入字符串缓冲区(会被修改) |
| abuff_cnt | 缓冲区长度 |
| aarr | 输出数组,存储分割后的子串指针 |
使用逗号作为分隔符,支持空格跳过。 超出数组大小的部分会被忽略。
| bool ngl::tools::splite | ( | const char * | abuff, |
| const char * | afg, | ||
| std::vector< std::string > & | avec ) |
按分隔符拆分C字符串到vector
| abuff | 源字符串(C风格) |
| afg | 分隔符字符串 |
| avec | [out] 存储拆分结果的vector |
使用string_view进行高效查找,避免不必要的内存分配 最后一个子串即使没有后续分隔符也会被添加
| bool ngl::tools::splite | ( | int32_t | aindex, |
| const std::vector< std::string > & | avec, | ||
| std::vector< std::string > & | adata ) |
从指定索引开始提取子vector
| aindex | 起始索引 |
| avec | 源字符串vector |
| adata | [out] 存储提取结果的vector |
将avec从aindex位置到末尾的元素插入到adata末尾 adata原有内容保留
| void ngl::tools::sregex | ( | const std::string & | apattern, |
| const std::string & | adata, | ||
| const std::function< void(std::string &)> & | afun ) |
使用正则表达式查找所有匹配的子串
使用正则表达式分割字符串并对每个匹配执行回调。
| apattern | 正则表达式模式 |
| adata | 要搜索的源数据 |
| afun | 匹配到的子串的回调函数 |
遍历所有匹配项,对每个匹配调用回调函数
| apattern | 正则表达式模式 |
| adata | 输入数据 |
| afun | 匹配回调函数 |
| std::size_t ngl::tools::strlen | ( | const char * | astr | ) |
安全的字符串长度计算
获取字符串长度
| astr | C风格字符串指针 |
| astr | 输入字符串 |
| void ngl::tools::test_filterword | ( | ) |
敏感词过滤功能测试函数
敏感词过滤器测试函数
测试UTF-8验证、敏感词加载、过滤、匹配、角色名检查等功能
用于验证过滤器功能的测试函数
| void ngl::tools::test_mail | ( | const char * | atitle, |
| const char * | acontent, | ||
| const std::vector< std::pair< std::string, std::string > > & | amailvec ) |
测试邮件发送功能
| atitle | 邮件标题 |
| acontent | 邮件内容 |
| amailvec | 收件人列表(邮箱,姓名),为空时使用默认收件人 |
| void ngl::tools::test_manage_curl | ( | ) |
测试HTTP请求功能
演示HTTPS POST请求的配置和回调处理
| std::string ngl::tools::time2str | ( | int | autc, |
| const char * | aformat ) |
将UTC时间戳转换为格式化字符串
| autc | UTC时间戳 |
| aformat | 时间格式字符串(如"%Y-%m-%d %H:%M:%S") |
使用tools::time::time2str进行转换
| autc | UTC时间戳(秒) |
| aformat | 时间格式字符串,默认为 "%y/%m/%d %H:%M:%S" |
| bool ngl::tools::to_asscii | ( | const std::string & | astr1, |
| std::string & | astr2 ) |
将UTF-8字符串转换为多字节ASCII字符串
将字符串转换为ASCII编码。
| astr1 | 源UTF-8字符串 |
| astr2 | [out] 存储转换结果的ASCII字符串 |
先转换为wstring,再转换为ASCII
| astr1 | 输入字符串 |
| astr2 | 输出ASCII字符串 |
| bool ngl::tools::to_bytes | ( | void * | apso, |
| int | alen, | ||
| void * | apto, | ||
| int & | aout_len ) |
十六进制字符串转字节数组
将十六进制字符串转换为二进制数据
将十六进制字符表示转换为二进制字节数组
| apso | 源十六进制字符串指针 |
| alen | 源字符串长度(字符数,必须为偶数) |
| apto | 输出字节数组指针(长度至少为 alen/2) |
| aout_len | [out] 输出的字节数 |
| true | 转换成功 |
| false | 参数错误或包含无效的十六进制字符 |
| apso | 源十六进制字符串指针 |
| alen | 源字符串长度 |
| apto | 目标缓冲区指针,用于存储二进制数据 |
| aout_len | 输出参数,实际转换的字节数 |
| int ngl::tools::to_hex | ( | void * | apso, |
| int | alen, | ||
| void * | apto ) |
字节数组转十六进制字符串
将二进制数据转换为十六进制字符串
将二进制字节数组转换为十六进制字符表示
| apso | 源字节数组指针 |
| alen | 源字节数组长度(字节数) |
| apto | 输出缓冲区指针(长度至少为 alen*2) |
| apso | 源数据指针 |
| alen | 源数据长度(字节数) |
| apto | 目标缓冲区指针,用于存储十六进制字符串 |
| bool ngl::tools::to_utf8 | ( | const std::string & | astr1, |
| std::string & | astr2 ) |
将多字节ASCII字符串转换为UTF-8字符串
将字符串转换为UTF-8编码。
| astr1 | 源ASCII字符串 |
| astr2 | [out] 存储转换结果的UTF-8字符串 |
先转换为wstring,再转换为UTF-8
| astr1 | 输入字符串 |
| astr2 | 输出UTF-8字符串 |
| void ngl::tools::transform_tolower | ( | std::string & | adata | ) |
将字符串转换为小写
将字符串转换为小写(原地修改)。
| adata | [in/out] 要转换的字符串 |
使用std::ranges::transform进行原地转换
| adata | 输入输出字符串 |
| void ngl::tools::transform_toupper | ( | std::string & | adata | ) |
将字符串转换为大写
将字符串转换为大写(原地修改)。
| adata | [in/out] 要转换的字符串 |
使用std::ranges::transform进行原地转换
| adata | 输入输出字符串 |
| int16_t ngl::tools::transformlittle | ( | parm< int16_t > & | avalues | ) |
将int16_t转换为小端字节序
将int16_t值转换为小端字节序。
| avalues | [in/out] 要转换的值 |
如果当前系统是小端序,直接返回原值 否则交换字节顺序
| avalues | 要转换的值 |
| int32_t ngl::tools::transformlittle | ( | parm< int32_t > & | avalues | ) |
将int32_t转换为小端字节序
将int32_t值转换为小端字节序。
| avalues | [in/out] 要转换的值 |
| avalues | 要转换的值 |
| int64_t ngl::tools::transformlittle | ( | parm< int64_t > & | avalues | ) |
将int64_t转换为小端字节序
将int64_t值转换为小端字节序。
| avalues | [in/out] 要转换的值 |
| avalues | 要转换的值 |
| uint16_t ngl::tools::transformlittle | ( | parm< uint16_t > & | avalues | ) |
将uint16_t转换为小端字节序
将uint16_t值转换为小端字节序。
| avalues | [in/out] 要转换的值 |
| avalues | 要转换的值 |
| uint32_t ngl::tools::transformlittle | ( | parm< uint32_t > & | avalues | ) |
将uint32_t转换为小端字节序
将uint32_t值转换为小端字节序。
| avalues | [in/out] 要转换的值 |
| avalues | 要转换的值 |
| uint64_t ngl::tools::transformlittle | ( | parm< uint64_t > & | avalues | ) |
将uint64_t转换为小端字节序
将uint64_t值转换为小端字节序。
| avalues | [in/out] 要转换的值 |
| avalues | 要转换的值 |
| std::string_view ngl::tools::trim_ascii_spaces | ( | std::string_view | avalue | ) |
去除字符串首尾的ASCII空格
去除字符串两端的ASCII空格
| avalue | 源字符串视图 |
使用string_view避免内存分配 只处理ASCII空格,不处理Unicode空格
| avalue | 输入字符串视图 |
| bool ngl::tools::try_lexical_cast | ( | const From & | afrom, |
| To & | ato, | ||
| const std::source_location & | asource = std::source_location::current() ) |
安全的lexical_cast实现,不抛出异常。
| To | 目标类型 |
| From | 源类型 |
| afrom | 要转换的值 |
| ato | 输出参数,存储转换后的值 |
| asource | 源代码位置,默认为当前调用位置 |
| std::string & ngl::tools::type_name | ( | ) |
获取类型的字符串表示
| T | 目标类型 |
使用编译器类型推导获取类型名称,并进行缓存优化。
| std::string & ngl::tools::type_name_handle | ( | std::string & | aname | ) |
处理C++类型名称,使其更易读
处理类型名称字符串
| aname | [in/out] 要处理的类型名称字符串 |
在GCC/Clang下进行名称demangle,然后删除 "struct "、"class "、命名空间前缀和空格
| aname | 类型名称字符串引用 |
移除类型名称中的命名空间前缀等冗余信息。
| std::string ngl::tools::url_decode | ( | const std::string & | astr | ) |
URL解码字符串
URL解码。
| astr | 要解码的URL字符串 |
将XX格式转换回原始字符,+转换为空格
| astr | 输入URL编码字符串 |
| std::string ngl::tools::url_encode | ( | const std::string & | astr | ) |
URL编码字符串
URL编码(百分号编码)。
| astr | 要编码的字符串 |
将非URL安全字符转换为XX格式 URL安全字符包括字母、数字和-_.~
| astr | 输入字符串 |
| bool ngl::tools::utf82wasscii | ( | const std::string & | astr, |
| std::wstring & | awstr ) |
将UTF-8字符串转换为宽字符串(wstring)
UTF-8编码转换为宽字符。
| astr | 源UTF-8字符串 |
| awstr | [out] 存储转换结果的宽字符串 |
使用utf8cpp库进行解码,捕获所有异常
| astr | 输入UTF-8字符串 |
| awstr | 输出宽字符串 |
| int32_t ngl::tools::utf8firstbyte | ( | uint8_t | afirst | ) |
获取UTF-8编码第一个字节的字节数
获取UTF-8首字节对应的字符长度。
| afirst | UTF-8编码的第一个字节 |
根据UTF-8编码规则,通过前导位判断字符长度
| afirst | UTF-8编码的首字节 |
| bool ngl::tools::uuid_make | ( | std::string & | astr | ) |
生成UUID字符串
生成UUID字符串。
| astr | [out] 存储生成的UUID字符串 |
生成格式为"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"的UUID Windows使用CoCreateGuid,其他平台使用uuid_generate
| astr | 输出参数,存储生成的UUID字符串 |
| bool ngl::tools::varint_decode | ( | varint_parm< int32_t > & | aparm | ) |
32位整数varint解码
从varint格式解码32位整数
将变长格式解码为32位整数
| aparm | 解码参数包,包含:
|
| true | 解码成功 |
| false | 参数错误或数据格式错误 |
| aparm | 解码参数,包含输入缓冲区和输出值 |
| bool ngl::tools::varint_decode | ( | varint_parm< int64_t > & | aparm | ) |
64位整数varint解码
从varint格式解码64位整数
将变长格式解码为64位整数
| aparm | 解码参数包,包含:
|
| true | 解码成功 |
| false | 参数错误或数据格式错误 |
| aparm | 解码参数,包含输入缓冲区和输出值 |
| bool ngl::tools::varint_encode | ( | varint_parm< int32_t > & | aparm | ) |
32位整数varint编码
编码32位整数为varint格式
将32位整数编码为变长格式
| aparm | 编码参数包,包含:
|
| true | 编码成功 |
| false | 参数错误或缓冲区不足 |
| aparm | 编码参数,包含待编码值和输出缓冲区 |
| bool ngl::tools::varint_encode | ( | varint_parm< int64_t > & | aparm | ) |
64位整数varint编码
编码64位整数为varint格式
将64位整数编码为变长格式
| aparm | 编码参数包,包含:
|
| true | 编码成功 |
| false | 参数错误或缓冲区不足 |
| aparm | 编码参数,包含待编码值和输出缓冲区 |
| int ngl::tools::varint_length | ( | parm< int32_t > & | avalues | ) |
计算32位整数的varint编码长度
获取32位整数的varint编码长度
根据数值大小计算编码后的字节数
| avalues | 待计算的32位整数参数包 |
| avalues | 包含待编码值的参数包 |
| int ngl::tools::varint_length | ( | parm< int64_t > & | avalues | ) |
计算64位整数的varint编码长度
获取64位整数的varint编码长度
根据数值大小计算编码后的字节数
| avalues | 待计算的64位整数参数包 |
| avalues | 包含待编码值的参数包 |
| bool ngl::tools::wasscii2asscii | ( | const std::wstring & | awstr, |
| std::string & | astr ) |
将宽字符串(wstring)转换为多字节ASCII字符串
宽字符(wchar_t)转换为ASCII字符串。
| awstr | 源宽字符串 |
| astr | [out] 存储转换结果的字符串 |
使用std::codecvt进行编码转换,支持本地化字符集
| awstr | 输入宽字符串 |
| astr | 输出ASCII字符串 |
| bool ngl::tools::wasscii2utf8 | ( | const std::wstring & | awstr, |
| std::string & | astr ) |
将宽字符串(wstring)转换为UTF-8字符串
宽字符转换为UTF-8编码。
| awstr | 源宽字符串 |
| astr | [out] 存储转换结果的UTF-8字符串 |
使用utf8cpp库进行转换,预分配3倍空间避免重新分配
| awstr | 输入宽字符串 |
| astr | 输出UTF-8字符串 |
|
inline |
|
inline |