`

char和wchar_t互转的操作类

    博客分类:
  • c++
c++ 
阅读更多

//@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之CString,wchar_t,int,string,char*之间的转换

    `CString`、`wchar_t`、`int`、`string`和`char*`都是编程中常用的字符串和数值类型,它们之间互相转换有助于在不同场景下灵活地处理数据。本篇文章将详细介绍这些类型之间的转换方法。 首先,`CString`是Microsoft...

    关于char,_wchar_t,_TCHAR,__T(),L,宏__T、TEXT,_TEXT、L.

    `char`, `_wchar_t`, `_TCHAR`, `__T()`, `L`, 宏`__T`, `TEXT`, `_TEXT`, 和 `L` 都是与字符编码和跨平台兼容性紧密相关的概念。 1. **`char`**: 这是最基本的字符类型,通常用于处理ASCII编码的单字节字符。例如...

    CString-const-char-char-to-WCHAR.rar_CString To Char_char wchar_

    wchar_t* wideStr = new wchar_t[wideCharCount]; MultiByteToWideChar(CP_ACP, 0, asciiStr, -1, wideStr, wideCharCount); // 使用wideStr delete[] wideStr; ``` 4. `WCHAR`到`char`的转换: 相反地,如果...

    CString、LPCTSTR、LPTSTR、TCHAR、WCHAR、string、wchar_t、char解析

    本文将深入解析几种常见的字符串类型,包括`CString`、`LPCTSTR`、`LPTSTR`、`TCHAR`、`WCHAR`、`string`、`wchar_t`和`char`。 1. `CString`:`CString`是Microsoft MFC(Microsoft Foundation Classes)库中定义...

    C语言通过MSXML6.0读写XML文件(同时支持char和wchar-t字符数组)

    在C语言中,处理XML文件通常...总之,通过MSXML6.0库,C语言可以方便地实现XML文件的读写操作,同时兼容`char[]`和`wchar_t[]`,为不同编码需求提供支持。理解并熟练运用这些方法,能够使你在处理XML数据时游刃有余。

    Char_Cstring_TCHAR.rar_C++ CString CHAR_Char_Cstring_TCHAR_TCHAR

    而在"Cstring_Char.cpp"和"Cstring_Char.h"这两个源文件中,很可能包含了具体的转换函数和示例代码,用于展示如何在`CHAR`、`TCHAR`和`CString`之间进行转换和操作。 例如,一个常见的转换函数可能如下所示: ```...

    各种 C++ 字符串类型转换

    本文将详细介绍几种常用的C++字符串类型(`char *`、`wchar_t*`、`_bstr_t`、`CComBSTR`、`CString`、`basic_string` 和 `System.String`)之间的转换方法,并通过示例代码加以解释。 #### 1. `char *` 类型转换 `...

    cpp-texport用于自动生成TCHAR类型程序的char和wchart类型的函数调用存根

    TCHAR是一个宏定义,它可以根据编译器的预定义宏自动选择为`char`或`wchar_t`,以适应宽字符(Unicode)和窄字符(ASCII)的环境。`cpp-texport`是一个工具,它帮助开发者自动生成与TCHAR相关的函数调用存根,使得在...

    C++各种字符串类型之间进行转换

    - **`basic_string`**:C++标准库中的模板类,可以用于创建任何字符类型(如`char`、`wchar_t`等)的动态字符串对象。 #### 2. `char *`到其他类型字符串的转换 ##### 2.1 `char *`转`wchar_t *` 为了将`char *`...

    VisualC++如何:在各种字符串类型之间进行转换[文].pdf

    可以使用构造函数直接从`char *`或`wchar_t *`创建`_bstr_t`对象,然后通过`+=`操作符添加文本。 4. **转换到`CComBSTR`**: - `CComBSTR`是MFC(Microsoft Foundation Classes)中的类,同样处理BSTR类型。转换...

    UTF8格式的字符串转变为char型格式字符串

    std::wstring_convert&lt;std::codecvt_utf8&lt;wchar_t&gt;&gt; converter; std::wstring wide_str = converter.from_bytes(utf8_str); std::vector&lt;char&gt; char_vec(wide_str.size()); for (size_t i = 0; i &lt; wide_str.size()...

    C++_Unicode_SBCS函数对照表

    在 C++ 中,Unicode 字符可以用 wchar_t 类型表示,而 SBCS 字符可以用 char 类型表示。 例如,_TCHAR_类型的函数可以处理 Unicode 字符,而_char_类型的函数只能处理 SBCS 字符。 3. TCHAR 和 wchar_t TCHAR 是...

    xTool (字符间常用转换函数) 持续更新中 适用于Unicode下

    `xTool`是一个专为Unicode环境设计的字符间常用转换函数库,它提供了对不同类型字符之间的转换功能,包括`CString`、`char`、`wchar_t`和`int`。下面将详细介绍这些类型以及它们之间的转换。 `CString`是Microsoft ...

    VisualC++如何:在各种字符串类型之间进行转换[归类].pdf

    - 使用`mbstowcs_s`函数将`char *`(多字节字符)转换为`wchar_t *`(宽字符)字符串。此函数会考虑源字符串的大小,并将转换后的字符串存储在目标数组中。 - `_bstr_t`是Microsoft的COM兼容字符串类,可以通过...

    VS2010下类型转换详细说明,附带程序源码,vs2010下亲测

    在Visual Studio 2010(VS2010)环境下,进行编程时经常会遇到不同字符类型的转换,尤其是`char*`和`wchar_t*`之间的转换。这两种类型的字符串分别代表了窄字符和宽字符,它们在处理多语言、Unicode编码等问题时起着...

    vc++中各种字符串含义和转换大全.pdf

    TCHAR在编译时可以是char或wchar_t,这取决于是否定义了_UNICODE宏。因此,CString可以处理ANSI和Unicode两种编码的字符串。 2. BSTR: BSTR是一种特殊的字符串类型,主要用于COM(Component Object Model)组件间...

    c++常用的字符转换和类型说明

    `LPCWSTR`和`LPWSTR`分别代表`const wchar_t*`和`wchar_t*`。 在Windows API中,`TCHAR`是一个宏定义,根据项目配置(多字节或宽字节字符集)动态地映射到`char`或`wchar_t`。因此,`LPTSTR`和`LPCTSTR`是`TCHAR*`...

    BSTR、Char和CString类型的转换.txt

    本文将详细解析BSTR、Char和CString三种类型之间的转换方法,这三种类型分别代表了不同的字符串存储格式,即二进制安全字符串(BSTR)、字符数组(Char)以及MFC类库中的字符串类(CString)。掌握这些转换技巧对于...

    Unicode ANSI中一些宏的解释

    如果定义了 `_UNICODE`,则 `_T()` 在字符串前面加上 `L`,使其成为宽字符串(即 `wchar_t` 类型的字符串)。如果没有定义 `_UNICODE`,则 `_T()` 不做任何改变。 ```c++ #ifdef _UNICODE #define _T(x) L##x #...

    定长字符串模板类

    针对char和wchar_t(我特讨厌这后面的_t这根尾巴)两种字符类型的基类的和默认traits 的typedef.写函数参数类型的时候可以少写几个字, ^=^ 4. template &lt;;size_t MaxSize, typename Traits=std::char_...

Global site tag (gtag.js) - Google Analytics