位宽。其实知道了这个以后,要在wchar_t 和 char两种类型之间转换就不难实现了。

wchar_t 转换为char 的代码如下:

有如下的wchar_t和char变量

wchar_t w_cn = '中';
         char c_cn[2] = {'0'} ;

char *C2W(wchar_t w_cn , char c_cn[2])

{

//following code convert wchar to char
    c_cn[0] = w_cn >> 8 ;
    c_cn[1] = w_cn ;
    c_cn[2] = '\0';

return c_cn ;

}

位的char来存储之。我们可以发现另外一个问题,wchar_t的高位字节应该存储在char数组的低位字节。(这里没有仔细研究了,觉得怪怪的)。

这是完成了wchar_t到char的转化,char到wchar_t的转换类似。

C++中,你要想这样:cout<<w_cn<<endl;打印wchar_t,那是不行的。why?我想是wchar_t类型没有重载<<运算符吧。要显示,我的方法是
        string cn(c_cn);
        cout<<cn<<endl;

这样就能正确的打印wchar_t字符了。是不是感觉好像做了好多事,但是完成的却是很简单的事情?呵呵,其实我也有同感,但是没有办法。更简单的办法,当然是直接用API(我一个是懒的去找了,二一个自己动手转换有些东西看的更清楚咯),但是这样的转换更灵活,在实际中应该会用到的。
        有了以上的基础,下面给出wchar_t字符串到char字符串的转换代码:

char *W2C(const wchar_t *pw , char *pc)
{
 //cout<<*pw<<endl;  //这样是不能正确显示的,你可以试试看显示的是什么
    *pc++ = *pw >> 8 ;
    *pc = *pw ;
    return 0 ;
}
 
char *wstr2cstr(const wchar_t *pwstr , char *pcstr, size_t len)
{
 char *ptemp = pcstr ;
    if(pwstr!=NULL && pcstr!=NULL)
    {
       
        size_t wstr_len = wcslen(pwstr) ;
        len = (len > wstr_len ) ?  wstr_len : len ;
    while( len -- > 0)
    {

W2C(pwstr , pcstr);
        pwstr++ ;
        pcstr +=2 ;    //和我们开始说的一样+2,不是+1
    }
        *pcstr = '\0';
        return ptemp ;
    }
    return 0 ;
}

上面就是代码,测试:

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

{

wchar_t pwstr[] = {'我' , '是' , '中' , '国' , '人'};

char *pcstr = (char *)new char[2 * wcslen(pwstr)+1] ;
    memset(pcstr , 0 , 2 * wcslen(pwstr)+1 );
    wstr2cstr(pwstr , pcstr , wcslen(pwstr)) ;

str.assign (pcstr);
    cout<<str<<endl;
    delete []pcstr ;

}

跨平台实现wchar_t转成char的更多相关文章

  1. mbstowcs_s实现wchar_t转成char

    把char*转换为wchar_t* 用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char*CStr = "string to convert"; ...

  2. CString转换成char*

    CString转换成char* :charSource = (char*)strSource.GetBuffer(0); 法2:charSource = (char*)strSource.GetBuf ...

  3. 将string转换成char*

    string 是c++标准库里面其中一个,封装了对字符串的操作  把string转换为char* 有3中方法:  1.data  如:  string str="abc";  ch ...

  4. CString 转换成 char *

    最近用到CString类,转换成 char * 类型,下面介绍用法: 一.CString 和 LPSTR 转换: CString转换成LPSTR: 方法一:CString server; LPSTR ...

  5. 将COleDateTime类型数据转换成char *数据

    用OpenCV做多摄像头校准时间,在图像上显示时间信息,需求要将COleDateTime类型数据转换成char *数据 具体代码如下: 1: COleDateTime m_checkDate; 2: ...

  6. sprintf将CString转换成char[]

      在MFC中使用sprintf()函数将CString转换成char[]时,char[]只接受第一个字符 使用的是VS2008 CString name;dbName="test" ...

  7. 将string转换成char型的一般方法

    C++文件读取中: infile in: in.open("file.dat",ios::in); 这样是能够的. 可是 string a; a="file.dat&qu ...

  8. 个人觉得存成char(12),优于varchar(12)

    w 延展一点:0----(还是上边的url),varchar(10)则数据库的存储1-11bytes,而不是0-10bytes;varchar(256)则为2-258bytes; 1----如果待入库 ...

  9. C++ 将string转换成char*字符串

    我们经常会使用C和C++的混合编程,在某些情况下,需要将C++的string,转换成char* 的字符串.下面说两种可行的方法,作为总结. 1. data(); 如: string str=" ...

随机推荐

  1. Java Error和Exception区别

    Error和Exception都继承自Throwable: 二者不同之处: Exception: 1.可以是可被控制(checked)或者不可控制(unchecked): 2.表示一个由程序员导致的错 ...

  2. andorid 文字颜色selector的使用

    文字颜色selector的使用 创建名称为selector_1的Android项目,在res/color文件夹下创建名称为button_selector_text.xml的文字颜色配置文件,代码如下 ...

  3. Android应用程序版本号管理(官方文档中文版)

    在应用程序的 升级/维护 策略中, 版本是一个关键的组成部分. 用户需要了解在他们的设备上所安装的应用程序的版本的特定信息, 以及已安装程序的升级版本可用的情况. 其他应用程序 - 作为同一个套件中发 ...

  4. visual studio 2013 配置 ef+pgsql

    环境:VS2013,WIN7 准备工作: 1.有哪些供应商提供EF6的支持? 可以看msdn给出的答案:Which providers are available for EF6? 在本文使用 Dev ...

  5. HDU 5749 Colmerauer 单调队列+暴力贡献

    BestCoder Round #84   1003 分析:(先奉上zimpha巨官方题解) 感悟:看到题解单调队列,秒懂如何处理每个点的范围,但是题解的一句算贡献让我纠结半天 已知一个点的up,do ...

  6. js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop。(转)

    js获取浏览器基本信息:document.body.clientWidth/clientHeight/scrollWidth/scrollTop. 分类: js.jquery.ext.js技术2011 ...

  7. IOS-day01_OC中类的创建以及使用

    OC中定义类 // 设计一个车类 @implementation Car : NSObject // 这个大括号里面写所有的属性 { @public int wheels ;//轮子个数 double ...

  8. Hadoop2.0新特性-持续追加【干货】

    1.NAME NODE HA 2.NAME NODE Federation 3.HDFS 快照(目录快照) 4.HDFS 缓存 5.HDFS ACL 6.异构层级存储结构 -------------- ...

  9. RStudio Keyboard Shortcuts

    Console Description Windows & Linux Mac Move cursor to Console Ctrl+2 Ctrl+2 Clear console Ctrl+ ...

  10. 《Java数据结构与算法》笔记-CH2有序数组

    /** * 上个例子是无序数组,并且没有考虑重复元素的情况. * 下面来设计一个有序数组,我们设定不允许重复,这样提高查找的速度,但是降低了插入操作的速度. * 1.线性查找 * 2.二分查找 * 有 ...