C++ String 字符串系列转换

// 宽字符转UTF8 ,处理字符乱码

std::string EncodeUtf8(std::wstring in)

{

std::string s(in.length() * 3 + 1, ' ');

size_t len = ::WideCharToMultiByte(CP_UTF8, 0,

in.c_str(), in.length(),

&s[0], s.length(),

NULL, NULL);

s.resize(len);

return s;

}

// UTF8 转宽字符

std::wstring DecodeUtf8(string in)

{

wstring s(in.length(), (' ')); //必需得添加"tchar.h"头文件

size_t len = ::MultiByteToWideChar(CP_UTF8, 0,

in.c_str(), in.length(),

&s[0], s.length());

s.resize(len);

return s;

}

//wstring转string

std::string ws2s(const std::wstring& ws)

{

std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";

setlocale(LC_ALL, "chs");

const wchar_t* _Source = ws.c_str();

size_t _Dsize = 2 * ws.size() + 1;

char *_Dest = new char[_Dsize];

memset(_Dest, 0, _Dsize);

wcstombs(_Dest, _Source, _Dsize);

std::string result = _Dest;

delete[]_Dest;

setlocale(LC_ALL, curLocale.c_str());

return result;

}

//string 转wstring

std::wstring s2ws(const std::string& s)

{

setlocale(LC_ALL, "chs");

const char* _Source = s.c_str();

size_t _Dsize = s.size() + 1;

wchar_t *_Dest = new wchar_t[_Dsize];

wmemset(_Dest, 0, _Dsize);

mbstowcs(_Dest, _Source, _Dsize);

std::wstring result = _Dest;

delete[]_Dest;

setlocale(LC_ALL, "C");

return result;

}

// 字节数据转换为可打印字符串

// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"

// 输入: pSrc - 源数据指针

// nSrcLength - 源数据长度

// 输出: pDst - 目标字符串指针

// 返回: 目标字符串长度

int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength)

{

const char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表

for (int i = 0; i < nSrcLength; i++) { *pDst++ = tab[*pSrc >> 4]; // 输出高4位 *pDst++ = tab[*pSrc & 0x0f]; // 输出低4位 pSrc++; } // 输出字符串加个结束符 *pDst = '\0'; // 返回目标字符串长度 return (nSrcLength * 2);

}

#include

#include

int gstringtobytes(std::string strsrc, std::vector& vec)

{

using namespace std;

ASSERT(strsrc.empty() != false);

std::istringstream ism(strsrc);

ism >> hex;

istream_iterator it(ism), iend;

std::vector vec;

//transform(first,last,result,op);

transform(it, iend, back_inserter(vec), [](unsigned u) {

return (BYTE)u; });

return vec.size();

}

// 可打印字符串转换为字节数据

// 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}

// 输入: pSrc - 源字符串指针

// nSrcLength - 源字符串长度

// 输出: pDst - 目标数据指针

// 返回: 目标数据长度

int gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)

{

for (int i = 0; i < nSrcLength; i += 2)

{

// 输出高4位

if ((*pSrc >= '0') && (*pSrc

{

*pDst = (*pSrc - '0')

}

else

{

*pDst = (*pSrc - 'A' + 10)

}

pSrc++; // 输出低4位 if ((*pSrc>='0') && (*pSrc<='9')) { *pDst |= *pSrc - '0'; } else { *pDst |= *pSrc - 'A' + 10; } pSrc++; pDst++; } // 返回目标数据长度 return (nSrcLength / 2);

}

int main(int argc, char* argv[])

{

char intSprint[255] = "C8329BFD0E0199999999";

unsigned char outBytes[255] = {0};

int szLength = 0;

int byLength = 0;

byLength = gsmString2Bytes(intSprint,outBytes,strlen(intSprint)); szLength = gsmBytes2String(outBytes,intSprint,strlen(intSprint)/2); printf("%s\n",intSprint); return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java--单继承、Object

java是单继承的&#xff0c;java中的类不支持多继承&#xff0c;但是支持多层继承。 反证法&#xff1a; 如果一个类同时继承两个类&#xff0c;然后两个类中都有同样的一个方法&#xff0c;哪当我创建这个类里的方法&#xff0c;是调用哪父类的方法 所以java中的类不支持多继…

Spring的@Feign源码分析

首先是开启Feign的注解EnableFeignClientsFeignClient EnableFeignClients会导入FeignClientsRegistrar类&#xff0c; FeignClientsRegistrar里面会解析EnableFeignClients注解&#xff0c;把里面配置的路径解析&#xff0c; 找到带有FeignClient注解的接口&#xff0c;注意是…

【Linux】:信号的产生

信号 一.前台进程和后台进程1.前台进程2。后台进程3.总结 二.自定义信号动作接口三.信号的产生1.键盘组合键2.kill信号进程pid3.系统调用1.kill函数2.raise函数3.abort函数 四.异常五.软件条件六.通过终端按键产生信号 一.前台进程和后台进程 1.前台进程 一个简单的代码演示 …

提高SQL语句执行效率的8个方法

提高SQL语句执行效率的8个方法 在日常的数据库操作中&#xff0c;如何提高SQL语句的执行效率是每个程序员都需要关注的问题&#xff0c;SQL语句的执行效率对系统的性能有着重要影响&#xff0c;本文将介绍8种提高SQL语句执行效率的方法。 合理使用索引 索引介绍 索引是数据…

quickapp_快应用_全局数据

全局数据 [1]本地数据存储[2] 数据缓存问题 有时在接口请求的某个数据需要在多个页面使用&#xff0c;此时有2个方法 [1] 将数据存储在本地—> 等价于浏览器的localStorage[2] 将数据存储在数据缓存中 -> 等价于vue中的vuex [1]本地数据存储 官方文档&#xff1a;官方…

【云备份】数据管理模块

文章目录 1. 数据管理模块要管理什么数据&#xff1f;2. 数据管理模块如何管理数据&#xff1f;3. 数据管理模块的具体实现BackupInfo 数据信息类NewBackupInfo —— 获取各项属性信息 DataManager 数据管理类构造函数析构函数insert —— 新增update —— 修改GetOneByURL——…

数据结构之时间复杂度与空间复杂度

1.算法效率 1.1 如何衡量一个算法的好坏&#xff1f; 比方说我们非常熟悉的斐波拉契数列&#xff1a; long long Fib(int N) {if(N < 3)return 1;return Fib(N-1) Fib(N-2); } 递归实现方式非常简洁&#xff0c;但一定好吗&#xff1f;如何衡量其好与坏&#xff1f; 1…

一文打尽相机单目标定(远心,沙姆镜头)

文章目录 普通镜头标定远心镜头标定沙姆镜头标定远心沙姆镜头标定实战 普通镜头标定 远心镜头标定 沙姆镜头标定 远心沙姆镜头标定 实战

JVM——垃圾回收器(Serial,SerialOld,ParNew,CMS,Parallel Scavenge,Parallel Old)

目录 1.垃圾回收器的组合关系1.年轻代-Serial垃圾回收器2.老年代-SerialOld垃圾回收器3.年轻代-ParNew垃圾回收器4.老年代- CMS(Concurrent Mark Sweep)垃圾回收器CMS执行步骤&#xff1a;CMS垃圾回收器存在的问题缺点&#xff1a;CMS垃圾回收器存在的问题 – 线程资源争抢问题…

Android 应用中Deep Link 和 App Link的区别

Android 应用中Deep Link 和 App Link的区别以及使用场景如下表格&#xff0c;希望给大家讲清楚了&#xff1a; 方式安全性跳转过程适配情况备注使用DeepLink接收无需校验&#xff0c;支持任意scheme需要浏览器中转支持所有Android版本由于支持所有版本的系统&#xff0c;可以…

目录 / 学习笔记快速链接

1.c语言 c语言 / 指针错误的几种情况-CSDN博客 c语言 / typedef和define之间的区别-CSDN博客 c语言 / 存储类型-CSDN博客 C语言 / 自定义函数实现strcat-CSDN博客 C语言 / 冒泡排序法-CSDN博客 C语言 / 指针相关内容总结-CSDN博客 C语言 / 自定义strcmp函数实现字符串排…

机器学习——支持向量机(SVM)

1.线性支持向量机 1.1数学模型 机器学习最终都是求解目标函数的最优问题&#xff1b; 一般都是讲问题转化为最小值来求解。 数学模型获得是一个不等式约束的最小化问题&#xff0c;求解时可通过构建拉格朗日函数求解。 1.2 拉格朗日函数及对偶问题求解 1.3 SMO算法求解 SMO算…

鸿蒙应用开发-初见:ArkTS

作者&#xff1a;HarderCoder ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 基本语法 …

python 常用内置模块之 json

介绍 当处理 JSON 数据时&#xff0c;Python 中的 json 模块提供了四个主要的函数&#xff1a;dump、dumps、load 和 loads。这些函数提供了在 JSON 数据和 Python 对象之间进行转换和序列化的功能。 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数…

ROS 功能包

ROS 功能包是 ROS 的核心组成部分之一&#xff0c;它是一个包含了源代码、配置文件、脚本等元素的一个单独的目录结构&#xff0c;用来实现特定功能。每个 ROS 功能包都有一些共同的文件&#xff0c;如 package.xml 文件&#xff0c;CMakeLists.txt 文件等&#xff0c;用于描述…

Redis Lua沙盒绕过 命令执行(CVE-2022-0543)漏洞复现

Redis Lua沙盒绕过 命令执行(CVE-2022-0543)漏洞复现 Redis如果在没有开启认证的情况下&#xff0c;可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。–那么这也就是redis未授权访问了 Redis的默认端口是6379 可以用空间测绘搜索&#xff…

【青蛙跳台阶问题 —— (三种算法)】

青蛙跳台阶问题 —— (三种算法&#xff09; 一.题目介绍1.1.题目1.2.图示 二.解题思路三.题解及其相关算法3.1.递归分治法3.2.动态规划算法&#xff08;Dynamic Programming&#xff09;3.3.斐波那契数列法 四.注意细节 一.题目介绍 1.1.题目 一只青蛙一次可以跳上1级台阶&am…

GWAS 分析模型 | FaST-LMM

GWAS 分析模型 | FaST-LMM FaST-LMM (Factored Spectrally Transformed Linear Mixed Models) 是一个用于进行全基因组关联分析&#xff08;GWAS&#xff09;的模型。与标准混合线性模型相比&#xff0c;FaST-LMM 通过对遗传相似性矩阵进行单次谱分解来减少计算资源消耗并提升运…

超全超实用行业解决方案合集,覆盖十大行业数据应用需求

现代企业面对复杂的业务需求&#xff0c;对数据分析的需求日益增加。 从实时销售到市场趋势&#xff0c;从客户行为到产品优化&#xff0c;每个环节都依赖于数据支持。然而&#xff0c;传统的数据分析平台常分散在不同系统和团队中&#xff0c;形成数据孤岛&#xff0c;降低了…

企业如何保障跨境金融业务中的数据安全传输?

随着全球化的不断深入&#xff0c;跨境金融业务日益频繁&#xff0c;然而在这些业务中&#xff0c;数据的安全传输一直是企业面临的重大挑战。跨境业务数据传输可能会遇到多种困难&#xff0c;如网络攻击、数据泄露、通信故障等。因此&#xff0c;企业需要采取有效的措施来确保…