/***************************************************************简单的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的转换相关推荐

  1. 关于C语言的一个简单工具类(包含常用进制转换和CRC,MD5,BBC)

    目录 一. 前言 二. 进制转换和格式控制 十进制转为十六进制函数 十六进制字符串转换成十六进制数组 把字符串中的空格符号删除 比较两个数组之间是否相同 命令响应数据中查找关键字 16位数据高低字节互 ...

  2. wchar_t与char转换(转载)

    原文地址:http://hi.baidu.com/gchrist/blog/item/29a138f533383e24bd310934.html 环境:Dev cpp 平台i386 C++标准中,wc ...

  3. wchar_t * 与 char * 互相转换小记

    wchar_t * 与char *之间的转化只需要借助标准库里面的std::wcstombs和std::mbstowcs就能实现了 转载于:https://www.cnblogs.com/zjzyh/ ...

  4. CString、TCHAR*、char*转换 cstring与char *的转化(还包含很多种转换)

    stringbasicsystemdeletenulldate <1>CString 转化为 char* [cpp] view plaincopyprint? CString strDat ...

  5. C++ WINDOWS下 wchar_t *和char * 相互转化总结篇

    说道wchar_t和char两个类型大家都不会陌生 wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节 char:当然就是指一个字节,在windows下面默认是gbk编码的 ...

  6. c语言 wchar t转char,C++ WINDOWS下 wchar_t *和char * 相互转化总结篇

    说道wchar_t和char两个类型大家都不会陌生 wchar_t:在windows下是Unicode 16编码,也就是俗称宽字节 char:当然就是指一个字节,在windows下面默认是gbk编码的 ...

  7. Java 编程的动态性,第 5 部分: 动态转换类--转载

    在第 4 部分" 用 Javassist 进行类转换"中,您学习了如何使用 Javassist 框架来转换编译器生成的 Java 类文件,同时写回修改过的类文件.这种类文件转换步骤 ...

  8. 【C#】简繁体转换类

    最近有用户说要把古诗词做成繁体的,搜寻了一下,发现网上关于简繁体转换的类基本都是基于TraditionalChineseToSimplifiedConverter和Microsoft Visual B ...

  9. java_64进制和10进制的转换类

    package com.test;/*** 64进制和10进制的转换类* * @author Administrator* */ public class Encode64 {final static ...

最新文章

  1. pt,px,rem和em之间区别总结
  2. (转)✈工欲善其事,必先利其器✔™
  3. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)
  4. Soa和Wcf(转)
  5. protocol buffer的高效编码方式
  6. 单E1光端机,V.35光端机,以太网光端机介绍及技术指标详解
  7. python知识点智能问答_基于知识图谱的智能问答机器人
  8. 微信发卡小程序源码-自动发卡小程序源码-带流量主功能
  9. L2-011. 玩转二叉树-PAT团体程序设计天梯赛GPLT
  10. Ubuntu16.04下PCL点云库的安装及使用demo
  11. patran如何看屈曲因子_如何真正有效地改善驼背?
  12. 【路径规划】基于matlab模拟退火算法求解多车型路径规划问题【含Matlab源码 913期】
  13. ubuntu记录pdf手写笔记: 数位板(硬件)+xournal(软件)
  14. poi合并单元格后居中
  15. flash写保护原理_Flash存储原理
  16. CSS动画实现的三种方式
  17. java 卡牌游戏抽奖。
  18. 为什么L0正则化是一个NP难解问题?
  19. App Inventor 2 连接调试器的各种方式比较
  20. 如何从svn上下载文件

热门文章

  1. 深入理解OpenStack Neutron之---3 Neutron的资源模型---读书笔记
  2. 维特比算法 python_维特比算法 实现中文分词 python实现
  3. 在Windows XP 上 架设 FTP服务器
  4. 谈一谈人工智能怎么入门_手把手教你入门
  5. c语言 2106错误,显示 error C2106: '=' : left operand must be l-value请教
  6. 算法原理系列:优先队列
  7. 模拟信号求解相位差(1)
  8. 档案馆建设标准条文说明
  9. 飞桨十大中文NLP开源工具详解
  10. zzuli OJ 1103: 平均学分绩点(函数专题)