简单的wchar_t 和 char 转换类, 且包含与UTF8的转换
/***************************************************************简单的wchar_t 和 char 转换类,且包含与UTF8的转换(需要定义宏_UTF8_)***************************************************************/
#ifndef __CHAR_CONVERT_H__
#define __CHAR_CONVERT_H__#include <SDKDDKVer.h> //"targetver.h"#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的信息
#endif// Windows 头文件:
#include <windows.h>/
// 简单的wchar_t 和 char 转换类, 且包含与UTF8的转换
class CWCharToChar
{
public:enum{EChar = 1,EWChar = 2,EUtf8 = 4};
private:char * m_cDest;wchar_t * m_wcDest;char * m_cUtf8;unsigned int m_nSrcType;public: char * Char(void) { return m_cDest; }wchar_t * WChar(void){ return m_wcDest; }#if defined( _UTF8_ )char * UTF8(void) { return m_cUtf8; }
#endifTCHAR * TChar(void){
#ifdef _UNICODEreturn WChar();
#elsereturn Char();
#endif}// ANSI/GBK 转 Unicode和UTF8的构造函数CWCharToChar(const char* psrc, unsigned int nSrcType = EChar): m_cDest(NULL), m_wcDest(NULL), m_cUtf8(NULL), m_nSrcType(nSrcType){if( EChar == m_nSrcType ){m_cDest = (char*)psrc;#if defined( _UTF8_ )int nLen = MultiByteToWideChar (CP_ACP, 0, m_cDest, -1, NULL, 0);m_wcDest = new wchar_t[nLen];MultiByteToWideChar (CP_ACP, 0, m_cDest, -1, m_wcDest, nLen);nLen = WideCharToMultiByte(CP_UTF8, 0, m_wcDest, -1, NULL, 0, NULL, NULL);m_cUtf8 = new char[nLen + 1];WideCharToMultiByte (CP_UTF8, 0, m_wcDest, -1, m_cUtf8, nLen, NULL,NULL);
#elseint nLen = MultiByteToWideChar (CP_ACP, 0, m_cDest, -1, NULL, 0);m_wcDest = new wchar_t[nLen];MultiByteToWideChar (CP_ACP, 0, m_cDest, -1, m_wcDest, nLen);
#endif}else if( EUtf8 == m_nSrcType ){m_cUtf8 = (char*)psrc;int nLen = MultiByteToWideChar(CP_UTF8, 0, m_cUtf8, -1, NULL,0);m_wcDest = new wchar_t[nLen+1];MultiByteToWideChar(CP_UTF8, 0, m_cUtf8, -1, m_wcDest, nLen);nLen = WideCharToMultiByte(CP_ACP, 0, m_wcDest, -1, NULL, 0, NULL, NULL);m_cDest = new char[nLen + 1];WideCharToMultiByte(CP_ACP, 0, m_wcDest, -1, m_cDest, nLen, NULL,NULL);}}// Unicode 转 ANSI/GBK和UTF8的构造函数CWCharToChar(const wchar_t * psrc): m_cDest(NULL), m_wcDest(NULL), m_cUtf8(NULL), m_nSrcType(EWChar){m_wcDest = (wchar_t*)psrc;// ANSI/GBK{int nLen = WideCharToMultiByte(CP_OEMCP,NULL, m_wcDest,-1,NULL,0,NULL,FALSE);m_cDest = new char[nLen];WideCharToMultiByte (CP_OEMCP,NULL,m_wcDest,-1, m_cDest, nLen,NULL,FALSE);}#if defined( _UTF8_ ){int nLen = WideCharToMultiByte(CP_UTF8, 0, m_wcDest, -1, NULL, 0, NULL, NULL);m_cUtf8 = new char[nLen + 1];WideCharToMultiByte (CP_UTF8, 0, m_wcDest, -1, m_cUtf8, nLen, NULL,NULL);}
#endif}~CWCharToChar(){if( EChar == m_nSrcType ){if( m_wcDest ) delete [] m_wcDest;if( m_cUtf8 ) delete [] m_cUtf8; }else if( EWChar == m_nSrcType ){if( m_cDest ) delete [] m_cDest; if( m_cUtf8 ) delete [] m_cUtf8; }else if( EUtf8 == m_nSrcType ){if( m_cDest ) delete [] m_cDest; if( m_wcDest ) delete [] m_wcDest;}}
};#endif //__CHAR_CONVERT_H__
简单的wchar_t 和 char 转换类, 且包含与UTF8的转换相关推荐
- 关于C语言的一个简单工具类(包含常用进制转换和CRC,MD5,BBC)
目录 一. 前言 二. 进制转换和格式控制 十进制转为十六进制函数 十六进制字符串转换成十六进制数组 把字符串中的空格符号删除 比较两个数组之间是否相同 命令响应数据中查找关键字 16位数据高低字节互 ...
- wchar_t与char转换(转载)
原文地址:http://hi.baidu.com/gchrist/blog/item/29a138f533383e24bd310934.html 环境:Dev cpp 平台i386 C++标准中,wc ...
- wchar_t * 与 char * 互相转换小记
wchar_t * 与char *之间的转化只需要借助标准库里面的std::wcstombs和std::mbstowcs就能实现了 转载于:https://www.cnblogs.com/zjzyh/ ...
- CString、TCHAR*、char*转换 cstring与char *的转化(还包含很多种转换)
stringbasicsystemdeletenulldate <1>CString 转化为 char* [cpp] view plaincopyprint? CString strDat ...
- C++ WINDOWS下 wchar_t *和char * 相互转化总结篇
说道wchar_t和char两个类型大家都不会陌生 wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节 char:当然就是指一个字节,在windows下面默认是gbk编码的 ...
- c语言 wchar t转char,C++ WINDOWS下 wchar_t *和char * 相互转化总结篇
说道wchar_t和char两个类型大家都不会陌生 wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节 char:当然就是指一个字节,在windows下面默认是gbk编码的 ...
- Java 编程的动态性,第 5 部分: 动态转换类--转载
在第 4 部分" 用 Javassist 进行类转换"中,您学习了如何使用 Javassist 框架来转换编译器生成的 Java 类文件,同时写回修改过的类文件.这种类文件转换步骤 ...
- 【C#】简繁体转换类
最近有用户说要把古诗词做成繁体的,搜寻了一下,发现网上关于简繁体转换的类基本都是基于TraditionalChineseToSimplifiedConverter和Microsoft Visual B ...
- java_64进制和10进制的转换类
package com.test;/*** 64进制和10进制的转换类* * @author Administrator* */ public class Encode64 {final static ...
最新文章
- pt,px,rem和em之间区别总结
- (转)✈工欲善其事,必先利其器✔™
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)
- Soa和Wcf(转)
- protocol buffer的高效编码方式
- 单E1光端机,V.35光端机,以太网光端机介绍及技术指标详解
- python知识点智能问答_基于知识图谱的智能问答机器人
- 微信发卡小程序源码-自动发卡小程序源码-带流量主功能
- L2-011. 玩转二叉树-PAT团体程序设计天梯赛GPLT
- Ubuntu16.04下PCL点云库的安装及使用demo
- patran如何看屈曲因子_如何真正有效地改善驼背?
- 【路径规划】基于matlab模拟退火算法求解多车型路径规划问题【含Matlab源码 913期】
- ubuntu记录pdf手写笔记: 数位板(硬件)+xournal(软件)
- poi合并单元格后居中
- flash写保护原理_Flash存储原理
- CSS动画实现的三种方式
- java 卡牌游戏抽奖。
- 为什么L0正则化是一个NP难解问题?
- App Inventor 2 连接调试器的各种方式比较
- 如何从svn上下载文件
热门文章
- 深入理解OpenStack Neutron之---3 Neutron的资源模型---读书笔记
- 维特比算法 python_维特比算法 实现中文分词 python实现
- 在Windows XP 上 架设 FTP服务器
- 谈一谈人工智能怎么入门_手把手教你入门
- c语言 2106错误,显示 error C2106: '=' : left operand must be l-value请教
- 算法原理系列:优先队列
- 模拟信号求解相位差(1)
- 档案馆建设标准条文说明
- 飞桨十大中文NLP开源工具详解
- zzuli OJ 1103: 平均学分绩点(函数专题)