C++ TCHAR* 与char* 互转
C++ TCHAR* 与char* 互转
在MSDN中有这么一段:
Note: The ANSI code pages can be different on different computers, or can be changed for a single computer, leading to data corruption. For the most consistent results, applications should use Unicode, such as UTF-8 (code page 65001) or UTF-16, instead of a specific code page, unless legacy standards or data formats prevent the use of Unicode. If use of Unicode is not possible, applications should tag the data stream with the appropriate encoding name when protocols allow it. HTML, XML, and HTTP files allow tagging, but text files do not.
大概意思就是说ANSI页码的文件可能会根据不同的计算机而改变,建议使用unicode(UTF-8或UTF-16)的编码
而VS默认就使用unicode编码
ANSI:char, string …
UNICODE: TCHAR, wchar_t …
MSDN里给我们提花了两个函数
MultiByteToWideChar:
int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar );
WideCharToMultiByte:
int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar, LPBOOL lpUsedDefaultChar );
互转的实现:
char* StrUtils::TCHAR2char( const TCHAR* STR )
{
//返回字符串的长度
int size = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, FALSE);
//申请一个多字节的字符串变量
char* str = new char[sizeof(char) * size];
//将STR转成str
WideCharToMultiByte(CP_ACP, 0, STR, -1, str, size, NULL, FALSE);
return str;
}
TCHAR* StrUtils::char2TCAHR( const char* str )
{
int size = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
TCHAR* retStr = new TCHAR[size * sizeof(TCHAR)];
MultiByteToWideChar(CP_ACP, 0, str, -1, retStr, size);
return retStr;
}
C++ TCHAR* 与char* 互转的更多相关文章
- TCHAR和CHAR类型的互转,string 转lpcwstr
https://www.cnblogs.com/yuguangyuan/p/5955959.html 没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时 ...
- TCHAR和CHAR类型的互转
http://blog.csdn.net/ahjxly/article/details/8494217 http://blog.csdn.net/b_h_l/article/details/75815 ...
- c++ string 与 char 互转 以及base64
c++ string 与 char 互转 很简单如下 ] = {'A','B','C','D','E'}; printf("%s\n",bts); //char to string ...
- CString与char *互转总结
1 前言 今天在网上看论坛,发现大家对CString与Char *互转各说一词,其实我发现提问者所说的情况与回答问题的人完全不是同一情况,这里做一总结. 首先大家得清楚一件事,一般在网上提出问题的人大 ...
- MFC TCHAR 和CHAR相互转换
没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换. 首先是把TCHAR转为char / ...
- wchat_t与char互转
C++ Code 1234567891011121314151617181920212223242526 //窄字符转宽字符 void ConvertA2W(wchar_t* the_strw ...
- C#string与char互转
string s = "asdf"; //字符转char char[] c = s.ToCharArray(); Console.WriteLine(s[]); //char转st ...
- QString和char*互转
1. QString转为char * // QString转QByteArray QByteArray sr = strQ.toLocal8Bit(); int len = sr.length(); ...
- CString和char互转,十六进制的BYTE转CString
CString转char: CString m_Readcard; char ReaderName[22]; strcpy((char*)&ReaderName,(LPCTSTR)m_Read ...
随机推荐
- 『无为则无心』Python面向对象 — 45、面向对象编程
目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...
- Django整体模型理解(1)
Django大概理解 *models: 设计一个模型,即在数据库中设计一个表,一个模型就是对应一个数据库中的表:models是一个类,类名就是表名,而类的属性就是表的字段.如下例子设计了两个表: f ...
- blender获取任意位置建筑白模
在前端3d可视化开发过程中有时会需要到白模,特别是gis开发,可能会用到各个城市的白模,其实可以使用Blender配合BlenderGis插件来提取osm中的白模.具体步骤如下: 安装软件 在此处下载 ...
- mysql 事务 隔离性 锁
1.四大特性 1.1 原子性(Atomicity) 一个事务是不可分割的最小工作单位.一个事务是不可分割的最小工作单位. 利用undo log保证原子性,undo log记录的是操作的反向语句,例如执 ...
- C# CLR简介
(一)CLR介绍 CLR是一个可以由多编程语言使用的运行时,CLR的核心功能:内存管理,程序集加载,安全性,异常处理,线程同步等等.可以被很多属于微软系列的开发语言使用. 事实上,在运行时,CLR根 ...
- Linux图形界面和命令界面切换
转至:https://blog.csdn.net/weixin_43683466/article/details/85727723 1.若虚拟机内热键被占用,可通过下图所示修改,移出快捷键ctrl+a ...
- [HITCON 2017]SSRFme
explode() 字符串转数组,用 ,号分隔数组 @mkdir() 创建目录 @chdir() 改变目录 这两的效果一样,如果在/home/php 目录下,执行mkdir('var') 和 ...
- P4-可编程语言代码学习
(1).behavioral-model 简称bmv2 P4程序首先经过p4c-bm模块编译成JSON格式的配置文件,然后将配置文件载入到bmv2中,转化成能实现交换机功能的数据结构. behavio ...
- Chrome:开发者模式下选取网页元素对应的代码
CTRL+SHIFT+C 或者 左上角的类鼠标图标
- 正则表达式(二)——Python中的相关方法
正则函数 match.search.findall.finditer.split.sub 返回一个对象:match.search.finditer 返回一个列表:findall.split 其中mat ...