[转载]wchar_t*,wchar_t,wchat_t数组,char,char*,char数组

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....
#include <string>
// 使用CString必须使用MFC,并且不可包含<windows.h>
#define _AFXDLL
#include <afx.h>
using namespace std;
//----------------------------------------------------------------------------------
//将 单字节char* 转换为 宽字节 wchar*
inline wchar_t* AnsiToUnicode( const char* szStr )
{
int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );
if (nLen == 0)
{
   return NULL;
}
wchar_t* pResult = new wchar_t[nLen];
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );
return pResult;
}
//----------------------------------------------------------------------------------
// 将 宽字节wchar_t* 转换 单字节char*
inline char* UnicodeToAnsi( const wchar_t* szStr )
{
int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
if (nLen == 0)
{
   return NULL;
}
char* pResult = new char[nLen];
WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
return pResult;
}
//----------------------------------------------------------------------------------
// 将单字符 string 转换为宽字符 wstring
inline void Ascii2WideString( const std::string& szStr, std::wstring& wszStr )
{
int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );
wszStr.resize(nLength);
LPWSTR lpwszStr = new wchar_t[nLength];
MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );
wszStr = lpwszStr;
delete [] lpwszStr;
}
//----------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
char*   pChar = "我喜欢char";
wchar_t* pWideChar = L"我讨厌wchar_t";
wchar_t   tagWideCharList[100] ;
char   ch = 'A';
char   tagChar[100] = {NULL};
CString   cStr;
std::string str;

// 注:设置语言环境以便输出WideChar
setlocale(LC_ALL,"chs");

// 注: char* 转换 wchar_t*
// 注: wchar_t 未重载 << ,所以不可使用 cout << 输出
pWideChar = AnsiToUnicode( pChar );
// 注:printf("%ls") 和 wprintf(L"%s") 一致
printf( "%ls/n", pWideChar );

// 注:wchar_t* 转换 wchar_t[]
wcscpy ( tagWideCharList, pWideChar );
wprintf( L"%s/n", tagWideCharList );

// 注:wchar_t[] 转换 wchar_t*
pWideChar = tagWideCharList;
wprintf( L"%s/n", pWideChar );

// 注:char 转换 string
str.insert( str.begin(), ch );
cout << str << endl;

// 注:wchar_t* 转换 string
pWideChar = new wchar_t[str.length()];
swprintf( pWideChar, L"%s", str.c_str());
wprintf( L"%s/n", pWideChar );

// 注:string 转换 char*
pChar = const_cast<char*>(str.c_str());
cout << pChar << endl;

// 注:char* 转换 string
str = std::string(pChar);
// 注: cout 的 << 重载了string, 若printf 的话必须 printf("%s", str.c_str());
//   而不可 print( "%s", str ); 因为 str 是个 string 类
cout << str << endl;

// 注:string 转换 char[]
str = "无聊啊无聊";
strcpy( tagChar, str.c_str() );
printf( "%s/n", tagChar );

// 注:string 转换 CString;
cStr = str.c_str();

// 注:CString 转换 string
str = string(cStr.GetBuffer(cStr.GetLength()));

// 注:char* 转换 CString
cStr = pChar;

// 注:CString 转换 char*
pChar = cStr.GetBuffer( cStr.GetLength() );

// 注:CString 转换 char[]
strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));

// 注:CString 转换 wchar_t*
pWideChar = cStr.AllocSysString();
printf( "%ls/n", pWideChar );
}

____________________________________________________________________________________________

CString 转 wchar_t

CString path = "asdf";

wchar_t wstr[256] = path.AllocSysString();

或者:

wchar_t wcstring[256];

MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);

wchar_t转CString

WideCharToMultiByte(CP_ACP,0,wcstring,256,

path.GetBuffer(0),256,NULL,NULL);

path.ReleaseBuffer(0);



string 转 CString
CString.format("%s", string.c_str());

char 转 CString
CString.format("%s", char*);

char 转 string
string s(char *);

string 转 char *
char *p = string.c_str();

CString 转 string
string s(CString.GetBuffer());

CString str = "fdjfdas";
string s = (LPCTSTR)str;

1,string -> CString
CString.format("%s", string.c_str());
用c_str()确实比data()要好.
2,char -> string
string s(char *);
你的只能初始化,在不是初始化的地方最好还是用assign().
3,CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
 

 

 

原文链接

多字节字符集与Unicode字符集(CString char*wchar_t* 容易出错的原因) 1.基本概念 2.L与_T 3.char TCHARwchar_t,strcpy wcscpy与_tcscpy 4.LPSTR,LPCSTR,LPTSTR,LPCTSTR,LPWSTR,LPCWSTR 5.ANSI转Unicode(charwchar_t) 6.Unicode转ANSI(wchar_t 转 har) 7.CString 1.ANSI与Unicode ANSI:多字... 阅读详情

相关推荐

CStringwchar的指针的相互转换

wchar_t类型转换为CStringwchar_t pch; CString str(pch); CString类型转换为wcahr_t类型: CString string; wcahr_t*pch=string.AllocSysString();

caoqingyizhiqiang的博客 1465

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString转自由骑士大哥的)

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....#include // 使用CString必须使用MFC,并且不可包含#define _AFXDLL#include using namespace std;//--------------------------

路径的专栏 2343

CStringwchar_t *的相互转化

对它们进行强制性转化: wchar_t *OptionText; CString cstring(OptionText);  CString 转换为wchar_t的为: OptionText=cstring.AllocSysString();

无为小青年6的专栏 1万+

CString::Find()函数

注:CString::Find函数,如果给定的参数是一个字符串,那么它必须与此字符串中的某一个子字符串完全匹配才能返回相匹配的子字符串第一个字符的索引。   CString::Find 作用   在一个较大的字符串中查找字符或子字符串   int Find( TCHAR ch ) const;   int Find( LPCTSTR lpszSub

u011244446的专栏 1万+

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString....

转载自:http://kasonpt.blog.163.com/blog/static/169099697201171662830731/ wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString.... #include // 使用CString必须使用MFC,并且不可包含 #define

光芒森林 1180

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString 以及system("command")...

转载:http://blog.csdn.net/chocolateconanlan/article/details/4058868 wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString…. 一些转换函数,主要针对宽字符。字符串是根本啊,要好好掌握了 #include <strin...

weixin_30578677的博客 89

c、c++ char*wchar*互相转换

1. 问题描述  编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes。在有关字符串的处理时尤其重要,系统编程时通常会遇到很多这样的问题,例如把wchar*的字符串转换为char*的字符串,有时还需要把char*类型的字符串转换为wchar*类型。下面提供几种解决方案。 2. 解决方案2.1 wchar* 转到 char*  方法一,使用_bstr_t转换。 ...

weixin_30621959的博客 406

C++ 数据charwchar_t SQLWCHAR

C++中对数据库的操作感觉太复杂了,不如C#好使,但最近出于某些原因还是学习了一下C++下操作数据库的方法。 如果要想用C++实现对数据库的操作其实很简单,但是如果你需要动态的操作数据库(比如获得用户输入的数据后存入数据库)那么就麻烦一下,因为SQLExecDirect()这个函数接收的SQL语句需要是SQLWCHAR *格式的,并不是char *格式!所以要将普通的char *转换成S...

weixin_30788619的博客 541

CString,string,char*的综合比较

(一) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中; CString(typedef CStringT > CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCH

foodvc的专栏 1016

CString转为wchar_t

CString strs; strs="hhh"; wchar_t thisChar;for(int i=0;i<sizeof(strs);i++) { thisChar = strs.GetAt(i);} GetGlyphOutlineW的第二个参数 UINT nChar。 我不管,拷来的程序定义wchar_t,保留。

qq_27976105的博客 1107

CString转成WChar

inline wchar_t* CStringToWChar_t( CString cstrInput) { wchar_t *wCharString =new wchar_t(cstrInput.GetLength() +1); wmemset(wCharString,'\0',sizeof(wCharString)); wCharString = cstrInput.GetBu

sunshine的专栏 1190

CString 转换为 wchar_t *

1、将CString转换为const char* CString str = _T("231222"); std::string strDp = CStringA(str); //或: std::string strDp = CT2A(str, CP_ACP); 2、将const char*转换为wchar_t*类型 size_t len = strDp.length() ...

diaokua8472的博客 4063

wcharchar的转换,wcharstring类型转换,vs配置

1.记录相关代码 char *wtoc(wchar_t *wText)   {   DWORD dwNum = WideCharToMultiByte(CP_ACP, NULL, wText, -1,NULL, 0, NULL, FALSE);//把第五个参数设成NULL的到宽字符串的长度包括结尾符   char *psText = NULL;   psText = new char[d

ORANCLE 723

windows 下 c++ 各字符(charwchar_t、string、cstring)的转换

c_str()和data()区别是:前者返回带'/0'的字符串,后者则返回不带'/0'的字符串.好像在c++11两者没有区别了 std::string、std::wstring的关系 ①:std::string内部是char单字节字符 ②:std::wstring内部是WCHAR宽字符,即wchar_t 在MFC的工程中我们可以设置工程的编码属性: ①:对于UNICODE的编码属性CString被定义为CStringW,其内部是WCHAR宽字符 即wchar_t ②:对于多字节的编码属性CString.

baidu_16370559的博客 2932

wchar_t *str转换为CString 类型---VC新手学习

初处接触wchar_t,不知道是什么东东?从字面上看,含有char,觉得应该是char类的字符,前面又有w,应该识wide,比char的存储位置还大。刚刚接触到程序里面有const wchar_t *myXML = NULL;Get(&amp;myXML );函数都封装好,得到了myXML 的值,可苦于不知道怎么输出myXML 的值,于是网上找了一下资料。网上的资料介绍wchar_t如下:“wc...

java开发指南博客 【转载】 1110

char wchar_t CString的相互转化

<br />#include <windows.h><br />#include <tchar.h><br />#include <locale.h><br />#include <stdio.h><br />#include <atlstr.h><br /> <br />/**<br /> *  @param cbCharSize: lpCharStr的字节个数,可以设为-1,如果以null结束。<br /> *  @param cchWCharCnt: lpWCharStr的字符个数<br /> * 

水人的专栏 7052

C/C++中char*wchar_t*之间的转换

功能:配置地域化信息头文件:< locale.h>函数原型:char* setlocale(int category, const char* locale)函数参数:category表示对本地化的某项内容进行设置,可取如下值:LC_ALL 包括下面的全部选项都要;LC_COLLATE 配置字符串比较;C_CTYPE 配置字符类别及转换,例如全变大写strtoupper();LC_MONETARY 配置金融货币;LC_NUMERIC 配置小数点后的位数;

auccy的博客 7794

Windows WCHAR 到 Linux wchar_t 字符类型的转换

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33858249的博客 408

TypeScript之内置对象和type关键字

TypeScript中的内置对象 说明:JavaScript 中有很多内置对象,它们可以直接在 TypeScript 中当做定义好了的类型。 使用时可以直接定义指定相应的类型,常用例子如下 let flag:Boolean = new Boolean("1"); let err:Error = new Error("错误"); let date:Date = new Date("2001-11...

zhang1339435196的博客 7786
上一篇: Windows 消息大全归类整理
下一篇: 自动输入填写qq 旺旺密码
zdhook
博客等级 码龄17年 23粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值