wchar_t,char,string,wstring之间的相互转换_C 语言

在处理中文时有时需要进行wchar_t,char,string,wstring之间的转换。

其中char和string之间、wchar_t和wstring之间的转换较为简单,代码在vs2010下测试通过。

复制代码 代码如下:

#include <iostream>
#include <string>
#include <tchar.h>
#include <Windows.h>

using namespace std;

//Converting a WChar string to a Ansi string
char *w2c(char *pcstr,const wchar_t *pwstr, size_t len)
{
 int nlength=wcslen(pwstr);
 //获取转换后的长度
 int nbytes = WideCharToMultiByte( 0, 0, pwstr, nlength, NULL,0,NULL, NULL );
 if(nbytes>len)   nbytes=len;
 // 通过以上得到的结果,转换unicode 字符为ascii 字符
 WideCharToMultiByte( 0,0, pwstr, nlength,   pcstr, nbytes, NULL,   NULL );
 return pcstr ;
}

int main(){

 setlocale(LC_ALL,"chs");
 char* cc = "this is a char 测试";
 wchar_t* wcc = L"this is a wchar 测试";
 string str("this is a string 测试 ");
 wstring wstr = L"this is a wstring 测试";

 //string to char
 const char* char_test = str.c_str();
 //cout<<"char_test:"<<char_test<<endl;

 //char to string
 string ss = cc;
 //cout<<"ss is :"<<ss<<endl;

 //wstring to wchar
 const wchar_t* wchar_test = wstr.c_str();
 //wcout<<wchar_test<<endl;

 //wchar to wstring
 wstring wss = wcc;
 wcout<<wcc<<endl;

 //char to wchar_t
 wchar_t *wc = new wchar_t[str.size()+1];
 //swprintf(wc,L"%S",cc);
 //wcout<<cc<<endl;
 delete []wc;

 // wchar_t to char
 char *pcstr = (char *)malloc(sizeof(char)*(2 * wcslen(wcc)+1));
 memset(pcstr , 0 , 2 * wcslen(wcc)+1 );
 w2c(pcstr,wcc,2 * wcslen(wcc)+1) ;
 free(pcstr);

 system("pause");
 return 1;
}

时间: 2024-11-02 13:52:25

wchar_t,char,string,wstring之间的相互转换_C 语言的相关文章

深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换_C 语言

复制代码 代码如下:     #ifndef USE_H_      #define USE_H_      #include <iostream>      #include <windows.h>      #include <string>      using namespace std;      class CUser      {      public:          CUser();          virtual~ CUser();      

NSString与C字符串之间的相互转换_C 语言

代码: [cpp] const char *cString = "这是一个C字符串, c string"; NSString *nsstring = @"这是个NSString字符串, nsstring"; NSLog(@"cString字符串-->%s ",cString); NSLog(@"NSString字符串-->%@",nsstring); const char *cString2 = [nsstring

C#中List〈string〉和string[]数组之间的相互转换_C#教程

1,从System.String[]转到List<System.String> System.String[] str={"str","string","abc"}; List<System.String> listS=new List<System.String>(str);   2, 从List<System.String>转到System.String[] List<System.Str

深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换

本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下:    #ifndef USE_H_      #define USE_H_      #include <iostream>      #include <windows.h>      #include <string>      using namespace std;      class CUser    

C++中string的模拟实现_C 语言

c++中的string类可以实现字符串对象的一系列操作,如下图就是从cplusplus上截取的string的一部分功能: 接下来我就简单模拟几个函数实现  首先,我们要给出完整的string类,包括构造函数,析构函数,私有成员char* str  并且在类内声明要实现的函数(本文我只实现了operator=,operator[ ],pushback(),以及三个operator+=,五个insert等)  #include<iostream> #include<cstring> u

STL 的string类怎么啦_C 语言

STL 的string类怎么啦?陈皓 前言 上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度的加深,到了后期,他几乎对string类失去了信心和信任,他觉得他对string类一头雾水.老实说,我几年前也有同样的痛苦(就是当我写下<标准C++类string的Copy-On-Write技术>之前的一段时间).那时,我不得不研究那根本不是给人看的SGI出品的string类的源码,代码的可读性几乎

stringstream操纵string的方法总结_C 语言

1 split字符串 之前在用C#写代码的时候,用过split函数,可以把一个字符串根据某个分隔符分成若干个字符串数组.在用C++操纵字符串的时候,我一直使用很笨的遍历的方法.为此,我问候过很多次C++标准委员会.直到某一天,我做了一个处理绝对路径的题目. 首先,我要把'/'作为分隔符,把输入字符串split一下.下面是我的代码: string inputString("/home/fun/./../code/"); stringstream ss(inputString); stri

基于Protobuf C++ serialize到char*的实现方法分析_C 语言

protobuf的Demo程序是 C++版本的protubuf有几种serialize和unSerialize的方法: 方法一: 官方demo程序采用的是 复制代码 代码如下:  // Write the new address book back to disk.     fstream output(argv[1], ios::out | ios::trunc | ios::binary);     if (!address_book.SerializeToOstream(&output))

string,CString,char*之间的转化_C 语言

string,CString,char*之间的转化 int 转 CString:CString.Format("%d",int);...............................string 转 CString CString.format("%s", string.c_str()); 用c_str()确实比data()要好. .......................................char* 转 CString CString.