//@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);
}
分享到:
相关推荐
`CString`、`wchar_t`、`int`、`string`和`char*`都是编程中常用的字符串和数值类型,它们之间互相转换有助于在不同场景下灵活地处理数据。本篇文章将详细介绍这些类型之间的转换方法。 首先,`CString`是Microsoft...
`char`, `_wchar_t`, `_TCHAR`, `__T()`, `L`, 宏`__T`, `TEXT`, `_TEXT`, 和 `L` 都是与字符编码和跨平台兼容性紧密相关的概念。 1. **`char`**: 这是最基本的字符类型,通常用于处理ASCII编码的单字节字符。例如...
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`。 1. `CString`:`CString`是Microsoft MFC(Microsoft Foundation Classes)库中定义...
在C语言中,处理XML文件通常...总之,通过MSXML6.0库,C语言可以方便地实现XML文件的读写操作,同时兼容`char[]`和`wchar_t[]`,为不同编码需求提供支持。理解并熟练运用这些方法,能够使你在处理XML数据时游刃有余。
而在"Cstring_Char.cpp"和"Cstring_Char.h"这两个源文件中,很可能包含了具体的转换函数和示例代码,用于展示如何在`CHAR`、`TCHAR`和`CString`之间进行转换和操作。 例如,一个常见的转换函数可能如下所示: ```...
本文将详细介绍几种常用的C++字符串类型(`char *`、`wchar_t*`、`_bstr_t`、`CComBSTR`、`CString`、`basic_string` 和 `System.String`)之间的转换方法,并通过示例代码加以解释。 #### 1. `char *` 类型转换 `...
TCHAR是一个宏定义,它可以根据编译器的预定义宏自动选择为`char`或`wchar_t`,以适应宽字符(Unicode)和窄字符(ASCII)的环境。`cpp-texport`是一个工具,它帮助开发者自动生成与TCHAR相关的函数调用存根,使得在...
- **`basic_string`**:C++标准库中的模板类,可以用于创建任何字符类型(如`char`、`wchar_t`等)的动态字符串对象。 #### 2. `char *`到其他类型字符串的转换 ##### 2.1 `char *`转`wchar_t *` 为了将`char *`...
可以使用构造函数直接从`char *`或`wchar_t *`创建`_bstr_t`对象,然后通过`+=`操作符添加文本。 4. **转换到`CComBSTR`**: - `CComBSTR`是MFC(Microsoft Foundation Classes)中的类,同样处理BSTR类型。转换...
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; std::wstring wide_str = converter.from_bytes(utf8_str); std::vector<char> char_vec(wide_str.size()); for (size_t i = 0; i < wide_str.size()...
在 C++ 中,Unicode 字符可以用 wchar_t 类型表示,而 SBCS 字符可以用 char 类型表示。 例如,_TCHAR_类型的函数可以处理 Unicode 字符,而_char_类型的函数只能处理 SBCS 字符。 3. TCHAR 和 wchar_t TCHAR 是...
`xTool`是一个专为Unicode环境设计的字符间常用转换函数库,它提供了对不同类型字符之间的转换功能,包括`CString`、`char`、`wchar_t`和`int`。下面将详细介绍这些类型以及它们之间的转换。 `CString`是Microsoft ...
- 使用`mbstowcs_s`函数将`char *`(多字节字符)转换为`wchar_t *`(宽字符)字符串。此函数会考虑源字符串的大小,并将转换后的字符串存储在目标数组中。 - `_bstr_t`是Microsoft的COM兼容字符串类,可以通过...
在Visual Studio 2010(VS2010)环境下,进行编程时经常会遇到不同字符类型的转换,尤其是`char*`和`wchar_t*`之间的转换。这两种类型的字符串分别代表了窄字符和宽字符,它们在处理多语言、Unicode编码等问题时起着...
TCHAR在编译时可以是char或wchar_t,这取决于是否定义了_UNICODE宏。因此,CString可以处理ANSI和Unicode两种编码的字符串。 2. BSTR: BSTR是一种特殊的字符串类型,主要用于COM(Component Object Model)组件间...
`LPCWSTR`和`LPWSTR`分别代表`const wchar_t*`和`wchar_t*`。 在Windows API中,`TCHAR`是一个宏定义,根据项目配置(多字节或宽字节字符集)动态地映射到`char`或`wchar_t`。因此,`LPTSTR`和`LPCTSTR`是`TCHAR*`...
本文将详细解析BSTR、Char和CString三种类型之间的转换方法,这三种类型分别代表了不同的字符串存储格式,即二进制安全字符串(BSTR)、字符数组(Char)以及MFC类库中的字符串类(CString)。掌握这些转换技巧对于...
如果定义了 `_UNICODE`,则 `_T()` 在字符串前面加上 `L`,使其成为宽字符串(即 `wchar_t` 类型的字符串)。如果没有定义 `_UNICODE`,则 `_T()` 不做任何改变。 ```c++ #ifdef _UNICODE #define _T(x) L##x #...
针对char和wchar_t(我特讨厌这后面的_t这根尾巴)两种字符类型的基类的和默认traits 的typedef.写函数参数类型的时候可以少写几个字, ^=^ 4. template <;size_t MaxSize, typename Traits=std::char_...