//@file widechar.h
//@author norkts<norkts@gmail.com>
class WideChar{
public:
WideChar();
WideChar(const wchar_t* in);
WideChar(const char* in);
~WideChar();
char* toChar(){
return data;
}
wchar_t* toWchar(){
return wdata;
}
int size(){
return _size;
}
int wsize(){
return _wsize;
}
void operator=(const wchar_t* in){
delete[] wdata;
delete[] data;
assign(in);
}
void operator=(const char* in){
delete[] wdata;
delete[] data;
assign(in);
}
private:
void assign(const wchar_t* in);
void assign(const char* in);
private:
wchar_t* wdata;
char* data;
int _wsize = 0;
int _size = 0;
};
//@file widechar.cpp
//@author norkts<norkts@gmail.com>
#include "WideChar.h"
WideChar::WideChar(){
}
WideChar::WideChar(const wchar_t* in){
assign(in);
}
WideChar::WideChar(const char* in){
assign(in);
}
WideChar::~WideChar(){
delete[] data;
delete[] wdata;
}
void WideChar::assign(const wchar_t* in){
_wsize = wcslen(in);
wdata = new wchar_t[_wsize + 1];
wmemset(wdata, 0, _wsize + 1);
wmemcpy(wdata, in, _wsize);
_size = _wsize * 2;
data = new char[_size + 1];
memset(data, 0, _size + 1);
WideCharToMultiByte(CP_ACP, 0, wdata, -1, data, _size, NULL, NULL);
_size = strlen(data);
}
void WideChar::assign(const char* in){
_size = strlen(in);
data = new char[_size + 1];
memset(data, 0, _size + 1);
memcpy(data, in, _size);
_wsize = _size * 2;
wdata = new wchar_t[_wsize + 1];
wmemset(wdata, 0, _wsize + 1);
MultiByteToWideChar(CP_ACP, 0, data, -1, wdata, _size);
_wsize = wcslen(wdata);
}
分享到:
相关推荐
VC++ MFC里定义了一些宏,例如LPCTSTR表示const TCHAR*,LPTSTR表示TCHAR*,LPSTR表示char*,LPWSTR表示wchar_t*,LPCSTR表示const char*,LPCWSTR表示const wchar_t*。总之就是LP表示指针,C表示const,STR表示char...
针对char和wchar_t(我特讨厌这后面的_t这根尾巴)两种字符类型的基类的和默认traits 的typedef.写函数参数类型的时候可以少写几个字, ^=^ 4. template <;size_t MaxSize, typename Traits=std::char_...
Unicode字符串,每个字符(汉字、英文字母)都占2个字节,以2个连续的\0结尾,NT操作系统内核用的是这种字符串,常被定义为typedef unsigned short wchar_t;所以我们有时常会见到什么char*无法转换为unsigned short*之...
以std::string为代表的处理字符串的类型(我们知道还有存储wchar_t的wstring类、原生c式字符串const char*等等,为了简化处理仅介绍std::string类型相关的操作,当你把握住了regex的主脉络之后,想使用其他的版本...
在C++中还增加了bool型变量和wchar_t型变量: 布尔型变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在表达式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值1或0。要把一个整型变量转换成布尔...
尽管C ++ STL中已有绳索的实现,但是该实现仅限于使用char或wchar作为基础类型的绳索。 此外,STL实现不支持Unicode,这增加了使用UTF-8字符串的复杂性(例如,按单词/代码点进行迭代)。 此实现同时提供了两者。 ...
TinyXML使用文档对象模型(DOM),这意味着XML数据被解析成一个可被浏览和操作的C++对象,然后它可以被写到磁盘或者另一个输出流中。你也可以把C++对象构造成一个XML文档然后把它写到磁盘或者另一个输出流中。 ...
下面这个模块是我使用易语言时写补丁最常用的一个模块(当然很多也是抄的),一开始我觉得bug肯定会很多,放出去肯定又会坑很多人,后来我发现坑坑更健康,当你明白一个东西的优缺点之后,你才会更好的选择你所需要...
int spawnvpe int mode char pathname char argv[] char envp[] spawn函数族在mode模式下运行子程序pathname 并将参数 arg0 arg1 arg2 argv[] envp[] 传递给子程序 出错返回 1 mode为运行模式 mode为 P WAIT ...
AIF,AIFF:音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式 ANI:Windows系统中的动画光标 ARC:LH ARC的压缩档案文件 ARJ:Robert Jung ARJ压缩包文件 ASD:Microsoft Word的自动保存文件;...