VC\MFC当中CString、string、char、char*、char数组、int等类型之间的转换令人晕头转向,特地搜集多篇文章资料,利用代码实例等清晰的理清他们之间的关系和如何转换,其实非常简单。

1、CString std::string互转
std::string strstring = "std::string";
CString strCString = _T("CString");

//CString->std::string
strstring = CStringA(strCString);

//std::string->CString
strCString = strstring.c_str();

2、int和CString
//CString->int
CString strInt = _T("123");
int n = 0;
n = _ttoi(strInt);
n = 9;
//int->CString
strInt.Format(_T("%d"), n);

3、double和CString
CString strdouble = _T("123.00");
double dVal = 0;
//CString->double
dVal = _tstof(strdouble);
dVal = 999.0;
//double->CString
strdouble.Format(_T("%f"), dVal);

//4、char*和CString
char* chchar = "chahdaslhdf";
CString strCh = _T("char");
//char*->CString
strCh = chchar;
//或者
//预转换,得到所需空间的大小
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, chchar, strlen(chchar), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_ACP, NULL, chchar, strlen(chchar), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0';
//附加到CString对象上
CString content;
content.Append(wszString);

//CString->char*
int n = strCh.GetLength(); //按字符计算,strCh的长度

int len = WideCharToMultiByte(CP_ACP, 0, strCh, n, NULL, 0, NULL, NULL);//按Byte计算str长度
char *pChStr = new char[len+1];//按字节为单位
memset(pChStr,0,len+1);
WideCharToMultiByte(CP_ACP, 0, strCh, n, pChStr, len, NULL, NULL);//宽字节转换为多字节编码
pChStr[len] = '\0';
memcpy(chDis, pChStr, len + 1);
delete []pChStr;

CString转char*

char* ch = new char;
CString str1 = _T("12121");
strcpy(ch, CStringA(str1).GetString());

5、将wchar_t*转化为char*

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+1];
    WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
    return pResult;
}

6、将char*转化为wchar_t*

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+1];
    MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );
    return pResult;
}

7、头文件#include <sstream>
//int->string
int n1 = 0;
std::stringstream ssCov;
std::string str;
ssCov<<n1;
ssCov>>str;

//string->int
std::string strNum = "123";
int n2 = atoi(strNum.c_str());

Unicode编码下字符串转换的更多相关文章

  1. 字符编码(续)---Unicode与ANSI字符串转换以及分辨字符编码形式

    Unicode与ANSI字符串转换 我们使用windows函数MultiByteToWideChar将多字节字符串转换为宽字符字符串,如下: int MultiByteToWideChar( UINT ...

  2. php unicode编码和字符串互转

    php字符串转Unicode编码, Unicode编码转php字符 百度了很多,都一样, 要么不对, 要不就是只是把字符串的汉字转Unicode 经过多次试验查找, 找到了如下方法, 注意:字符串编码 ...

  3. Unicode编码解码在线转换工具

    // Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standar ...

  4. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存

    import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...

  5. C++下字符串转换

    引用自:http://blog.sina.com.cn/s/blog_a98e39a20101ari9.html 把最近用到的各种unicode下类型转换总结了一下,今后遇到其他的再补充: 1.str ...

  6. utf8、ansii、unicode编码之间的转换

    #include "stdafx.h"#include "windows.h"#include <iostream>#include <str ...

  7. .Net(c#)汉字和Unicode编码互相转换

    {"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com&q ...

  8. .Net(c#)汉字和Unicode编码互相转换实例

    {"name": "\u676d\u5dde", "href": "www.baidu.com"} 经常遇到这样内容的j ...

  9. Unicode编码解析

    概述 转载自博文浅谈Unicode编码 参考博文,结合自己实际情况进行部分内容添加修改 一 需求 java源码中尤其是数字部分用到了很多Unicode方面知识,如果不懂,看源码的时候会很懵逼 java ...

随机推荐

  1. python使用记录

    #2017-7-17 1.用len()函数可以获得list元素的个数; len()可以获取字符串长度 2. list正向0开始索引,,逆向-1开始索引; 也可以把元素插入到指定的位置,比如索引号为1的 ...

  2. Redis shell

    Redis shell 命令 参数 功能 redis-cli -r 将一个命令执行多次 -i 每隔几秒执行一次 -x 和|一起接收前面地输出,并执行命令 -c   -a   --scan/--patt ...

  3. Linux桥接网络配置

    在虚拟机网络配置中,选择桥接的方式.然后进入linux进行设置. 编辑 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPR ...

  4. win10安装tomcat7

    下载Tomcat 安装tomcat tomcat7是绿色软件,解压后即可使用,请大家先将tomcat解压到合适的位置(建议整个路径都是英文路径),下载 apache-tomcat-7.0.79-win ...

  5. ES6 Class基本用法

    JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子. function Point(x, y) { this.x = x; this.y = y; } Point.pr ...

  6. ios图文混编瀑布流

    ios图文混编瀑布流,利用UICollectionView 实现图文混编的瀑布流,支持section内容伸缩 http://www.huiyi8.com/pubuliu/

  7. 分享知识-快乐自己:Hibernate各种查询操作

    Hibernate各种查询操作(一) 测试数据库如下: t_sort表:                                   t_good表: 一.对象导航方式查询 查询所有食品类下面 ...

  8. redis实现分布式锁——核心 setx+pipe watch监控key变化-事务

    如何设计一把分布式锁 我们用 redis 来实现这把分布式的锁,redis 速度快.支持事务.可持久化的特点非常适合创建分布式锁. 分布式环境中如何消除网络延迟对锁获取的影响 锁,简单来说就是存于 r ...

  9. findbugs规则

    FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查 ...

  10. 在eclipse配置Maven

    一.配置系统Maven环境变量    1. 前往https://maven.apache.org/download.cgi下载最新版的Maven程序: 2. 新建环境变量MAVEN_HOME,赋值D: ...