stl中char 与wchar 的转换

学习记录:

stl中 字符串 str自然对应的是string

宽字符串wchar 对应的是wstring

宽字符串占用两个字节

两者的转换有三种办法

1 windows 的api转换函数WideCharToMultiByte()与MultiByteToWideChar(). 不适合跨平台使用.

2 ATL中CA2W类与CW2A类。或者使用A2W宏与W2A宏。稍显累赘和麻烦

3 使用CRT库的函数 函数和使用方法见下列代码

#include <string>
#include <iostream>
#include <locale.h>

using namespace std;

string ws2s(const wstring &ws)
{
    const wchar_t* wpchar = ws.c_str();
    size_t returnVal = 0;
    size_t wSize = 2*ws.size() + 1;
    char* pchar = new char[wSize];
    memset(pchar,0,wSize);
    wcstombs_s(&returnVal,pchar,wSize,wpchar,wSize);
    string result = pchar;
    delete[] pchar;
    return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"chs");

    wstring ws = L"中国 你好,sf*&%*&^%^&sd,这是一个测试";
    string ss = ws2s(ws);

    wcout << ws << endl;
    cout << ss << endl;

    return 0;
}
时间: 2024-12-14 09:12:51

stl中char 与wchar 的转换的相关文章

char向wchar的转换-MultiByteToWideChar

问题产生 使用CreateFile函数,如下: CreateFile(lpcTheFile, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) 第一个参数是wchar类型,而我从配置文件中读入的文件路径是char类型,因此涉及到char至wchar的转换问题 问题解决 使用MultiByteToWideChar函数函数代码如下: DWORD dwPathLen = MultiByteToWideChar(CP_ACP

c++ char*和wchar*互相转换(转)

原文地址: 1.c++ char*和wchar*互相转换 2.C++ WINDOWS下 wchar_t *和char * 相互转化总结篇 原文地址:https://www.cnblogs.com/jixiaohua/p/12169275.html

char到wchar的转换实质

1.从char到wchar_t "这个问题比你想象中复杂" 从字符到整数 char 是一种整数类型,这句话的含义是,char所能表示的字符在C/C++中都是整数类型.好,接下来,很多文章就会举出一个典型例子,比如,'a'的数值就是0x61.这种说法对吗?如果你细心的读过K&R和BS对于C和C++描述的原著,你就会马上反驳道,0x61只是'a'的ASCII值,并没有任何规定C/C++的char值必须对应ASCII.C/C++甚至没有规定char占几位,只是规定了sizeof(ch

c、c++ char*和wchar*互相转换

1. 问题描述 编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes.在有关字符串的处理时尤其重要,系统编程时通常会遇到很多这样的问题,例如把wchar*的字符串转换为char*的字符串,有时还需要把char*类型的字符串转换为wchar*类型.下面提供几种解决方案.2. 解决方案2.1 wchar* 转到 char* 方法一,使用_bstr_t转换. 1. 问题描述 编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes.在有关字符串的处理时尤

c++中char*\wchar_t*\string\wstring之间的相互转换

最近在编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,一直自己贴那几句代码.觉得麻烦,于是就自己写了一个类来封装wchar_t与char类型间的转换, 其他的,诸如:CString\ LPWSTR\TCHAR   CHAR\LPSTR之间也是一样用 头文件: #ifndef USE_H_ #define USE_H_ #include <iostream> #include <windows.h> #include <string> using namespac

编写STL中没有定义的函数(如果能编译)

实例目标:本例介绍如何编写标准模板库STL中没有定义的函数.这里列举两个例子,一个是将所有数据类型转换成字符串型的to_string函数,另一个是它的"反函数"from_string函数,用来将字符串转化为某一类型 具体内容: 在std::string模板中没有包含一些函数实用性较强的,原因就是因为客户轻易编写其中的代码.例如:可以实现一个将所有数据类型转换为字符串型的to_string函数代码如下: #include<iostream> template<class

Windows编程中char*转LPCWSTR解决办法总结

Windows编程中经常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题,于是自己总结了几种解决办法. 1.通过T2W转换宏 char* szStr = "balabala"; CString str = CString(szStr); USES_CONVERSION; LPCWSTR wszClassName = new WCHAR[str.GetLength()+1]; wcscpy((LPTSTR)wszClassName,T2W((LPTSTR)

char,wchar_t,WCHAR,TCHAR,ACHAR的区别----LPCTSTR

转自http://blog.chinaunix.net/uid-7608308-id-2048125.html 简介:这是DWORD及LPCTSTR类型的了解的详细页面,介绍了和类,有关的知识,加入收藏请按键盘ctrl+D,谢谢大家的观看!要查看更多有关信息,请点击此处 首先声明,这都是在网上找的资料,我再整理修改的: 一:关于DWORD DWORD就是32bit的unsigned  long无符号长整型,DWORD是双字类型 ,4个字节,API函数中有很多参数和返回值是DWORD的. 二:如何

转:char*, char[] ,CString, string的转换

转:char*, char[] ,CString, string的转换 (一) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中: CString(typedef CStringT > CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicod