/** C++ 字符串的一点点转换*/
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <clocale> //setlocale
#include <Windows.h>
#include <WinCon.h>
using namespace std;
//using namespace System; //需要CLR支持wchar_t* mbs2wcs(const char* mbstr)
{
wchar_t* wcstr = NULL;// Get the size of wchar_t after converted
#ifdef WIN32
int size = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, NULL, 0);
#else
size_t size = mbstowcs(NULL, mbstr, 0);
#endifwcstr = new wchar_t[size+1];
if (wcstr)
{
memset(wcstr, 0, size * sizeof(wchar_t));
#ifdef WIN32
int ret = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, wcstr, size);
if (ret == 0) // MultiByteToWideChar returns 0 if it does not succeed.
#else
size_t ret = mbstowcs(wcstr, mbstr, size+1);
if (ret == -1)
#endif
{
delete[] wcstr;
wcstr = NULL;
}
}return wcstr;
}char* wcs2mbs(const wchar_t* wcstr)
{
char* mbstr = NULL;// Get the size of char after converted
#ifdef WIN32
int size = WideCharToMultiByte(CP_UTF8, 0, wcstr, -1, NULL, 0, NULL, NULL);
#else
size_t size = wcstombs(NULL, wcstr, 0);
#endifmbstr = new char[size+1];
if (mbstr)
{
memset(mbstr, 0, size * sizeof(char));
#ifdef WIN32
int ret = WideCharToMultiByte(CP_UTF8, 0, wcstr, -1, mbstr, size, NULL, NULL);
if (ret == 0) // MultiByteToWideChar returns 0 if it does not succeed.
#else
size_t ret = wcstombs(mbstr, wcstr, size+1);
if (ret == -1)
#endif
{
delete[] mbstr;
mbstr = NULL;
}
}return mbstr;
}int main(int argc, char *argv[]){
setlocale(LC_ALL, "chs");//设置代码页,简体中文是936
SetConsoleOutputCP(936);cout<<"string convert..`\nchar *\nwchar_t\n`\n"<<endl;char *str = "long long ago, there is a girl, she\'s name is little redhat.";
cout<<"\nchar *str :\n"<<str<<endl;//mbstowcs && wcstombs
// Convert to a wchar_t*wchar_t *wstr;
wstr = mbs2wcs(str);
wcout<<"\nwchar_t *wstr : \n"<<wstr<<endl;cout<<"sizeof(*str): "<<sizeof(*str)<<" byte"<<endl;
cout<<"sizeof(*wstr): "<<sizeof(*wstr)<<" byte"<<endl;    //wstr指向第一个字符'l'占了16bit=2bytereturn 0;
}

multi-byte wide-char相关推荐

  1. Oracle varchar2或char类型的byte和char的区别

    那其中的BYTE和CHAR有什么区别呢 BYTE,用字节指定:VARCHAR2(10 BYTE).这能支持最多10字节的数据,在一个多字节字符集中,这可能只是两个字符.采用多字节字符集时,字节与字符并 ...

  2. Java最佳实践– Char到Byte和Byte到Char的转换

    在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 特别是,我们将重点介绍使用默认编码时如何有效地处理字符到字节和字节到字符的转换. 本文总结了两种提 ...

  3. null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)

    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外) 转载于:https://www.cnblogs.com/zhenmi ...

  4. byte,int,char的区别

    什么是byte byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数. 在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在Java中,by ...

  5. java byte与char互转原理_java byte与char互转原理

    一.字节和unicode Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的.因此Java要对这些字节流经行转化. char是unicode的, ...

  6. char byte java_java byte与char互转原理-转 | 学步园

    一.字节和unicode Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的.因此Java要对这些字节流经 行转化. char是unicode的 ...

  7. java byte与char互转原理_【转】java byte与char互转原理

    一.字节和unicode Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的.因此Java要对这些字节流经行转化. char是unicode的, ...

  8. java乱码详解(java中byte与char的转换)

    转自:http://hi.baidu.com/%C6%F3%D2%B5%BC%D2%D4%B0/blog/item/825a4858d6248e8b810a181a.html   java byte与 ...

  9. C++ byte数组/char数组 截取部分字节

    VS-C++ 系列:所有相关C++文章链接. VS-C# 系列:所有相关C#文章链接. bat 系列:所有相关bat文章链接. OpenCV 系列:所有相关OpenCV文章链接. AD 系列:所有相关 ...

  10. byte转char java_byte怎么转换为char

    展开全部 byte 是字节62616964757a686964616fe78988e69d8331333337376333数据类型 ,是有符号型的,占1 个字节:大小范围为-128-127 .char ...

最新文章

  1. 【蓝桥java】进制与整除之天平秤重
  2. sql语句相似度统计的说明
  3. 【PAT乙级】1046 划拳 (15 分)
  4. q87主板支持cpu型号_怎么选内存,看主板和CPU的支持,取一致性约束
  5. selenium3 + python - cookie定位
  6. 【codeforces 798B】Mike and strings
  7. 面向对象 —— 类设计(十)—— 成员函数
  8. FIT2CLOUD混合云管理平台实现可扩展架构升级
  9. 计算机描绘的基因结构图,推荐一款好用的基因结构图在线绘制工具!
  10. 推荐一款好用的在线json格式化工具
  11. 全链路UI设计师了解一下
  12. 苹果手机自带表格软件_手机自带的软件无法卸载?教你一招”!
  13. SpringCloud2.0
  14. 远程--不用关闭防火墙,也可以远程连接(远程桌面连接不上怎么办)
  15. 训练赛总结(老李题集)
  16. 研究生发计算机科学增刊,计算机科学学院研究生奖学金评审科研成果认定办法(暂行).PDF...
  17. 为公司高管履职风险买单的董监高责任保险DO
  18. maya2020卸载不干净安装不了_maya2020卸载不干净_maya怎样卸载干净,如何完全彻底删除清理干净MAYA各种残留注册表和文件?......
  19. 快慢指针判断链表是否有环
  20. 【testNG】执行多个suit

热门文章

  1. 小区物业费信息管理系统设计c++_没有入住需要交物业费吗?有没有办法不交物业费呢?法律专家解读...
  2. NetBeans eclipse比較
  3. qt mysql 清空表格_qt删除数据库中的表
  4. node 加密解密模块_NODE.JS加密模块CRYPTO常用方法介绍
  5. 经典Wide Deep模型介绍及tensorflow 2代码实现
  6. php escape undfine,PHP中处理 undefined variable的方法 | Soo Smart!
  7. mysql online ddl和pt_MySQL变更之:Online DDL 和 PT-OSC 该选谁?
  8. oracle32位11g中文乱码,win7 64位系统 Oracle32bit + PL/SQL访问Orale服务,Oracle 11g的安装,中文乱码问题的解决...
  9. 远程删掉服务器的文件能找回吗,远程删除Windows服务器指定目录下N天前文件方法...
  10. c# 如何抓微信把柄_C#微信公众号开发--微信事件交互