#include <string>#include <locale>#include <codecvt>// convert string to wstringinline std::wstring to_wide_string (const std::string& input){std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;return converter.from_bytes (input);}// convert wstring to string inline std::string to_byte_string(const std::wstring& input){// std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;std::wstring_convert<std::codecvt_utf8
今天打算做string到wstring转换时发现以前早已经写过,已经忘记从哪里找来的了,贴出代码,以防再忘记。 C++11后UTF8编码转换还真是方便 #include <string> #include <locale> #include <codecvt> // convert string to wstring inline std::wstring to_wide_string(const std::string& input) { std::wstring_convert<std::codecvt_utf8 <wchar_t>> converter; return converter.from_bytes(input); } // convert wstring to string inline std::string to_byte_string(const std::wstring& input) { //std::wstring_convert<std::codecvt_utf8_
std::string result; std::strstream ss; ss << t; ss >> result; return result; } std::wstring
字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符 iswdigit() isdigit() 测试字符是否为数字 iswgraph() isgraph() 测试字符是否是可见字符 iswlower() islower() 测试字符是否是小写字符 iswprint() isprint() 测试字符是否是可打印字符 iswpunct() ispunct() 测试字符是否是标点符号 iswspace() isspace() 测试字符是否是空白符号 iswupper() isupper() 测试字符是否是大写字符 iswxdigit() isxdigit()测试字符是否是十六进制的数字
然而对于宽字符集的字符串(std::wstring),上面的办法就适用了,因为::toupper或::tolower函数并不能区分wchar_t和char。 如果对std::wstring调用::toupper或::tolower进行转换,就会把字符串中的宽字符集内容(比如中文)破坏。 实现代码如下,下面的模板函数(toupper,tolower)支持std::string,std::wstring类型字符串大小写转换 #pragma once #include <algorithm> std::wcout.imbue(std::locale(std::locale(), "", LC_CTYPE)); std::wcout << gdface::tolower(std::wstring (L"字符串转小写TEST HELLO WORD 测试")) << std::endl; std::wcout << gdface::toupper(std::wstring(L"字符串转大写test
(const std::wstring& str) { static std::wstring_convert<std::codecvt_utf8<wchar_t> > strCnv; return strCnv.to_bytes(str); } std::wstring utf8string2wstring(const std::string& str) { static std: :wstring_convert< std::codecvt_utf8<wchar_t> > strCnv; return strCnv.from_bytes(str); } // string 的编码方式为除utf8外的其它编码方式,可采用: std::string wstring2string(const std::wstring& str, const std::string& locale <F> strCnv(new F(locale)); return strCnv.to_bytes(str); } std::wstring string2wstring(const std
wsStrA ,wstring wsStrB); DWORD GetProcessIdByName(const wstring &wsProcessName); std::string ws2s(const std::wstring& s_src,UINT CodePage = CP_ACP); std::wstring s2ws( const std::string& wsStrA ,wstring wsStrB) { int nSize = wsStrA.length(); for(int i = 0 ;i < nSize ;i ++) = wstring::npos) { wsNowProcessName = wstring(wstring(tcProcName).substr(nPos + 1)); &wsPorcessName ,const wstring &wsDllPath) { //1.提权 if(!
> getFilesInDirectory(const std::wstring& directoryPath) { std::vector<std::wstring> filePaths; > getFilesInDirectory(const std::wstring& directoryPath) { std::vector<std::wstring> filePaths; > getFilesInDirectory(const std::wstring& directoryPath) { std::vector<std::wstring> filePaths; ipString = std::to_wstring(ipBytes[0]) + L"." + std::to_wstring(ipBytes[1]) + L". & processName, const std::wstring& processPath) { std::vector<std::wstring> keywords = { L"PC", L"
C++ 常用代码片段整理 一丶文件 文件夹相关 1.1 递归删除文件 wstring Utilstring2wstring(string str) { wstring result; //获取缓冲区大小 = NULL) { delete[] buffer; buffer = NULL; } return result; } //将wstring转换成string string Utilwstring2string (wstring wstr) { string result; //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 int len = WideCharToMultiByte(CP_ACP buffer; return result; } bool DeleteAllFileA(std::string FileName) { string RootFileName = FileName; wstring wRootFileName = Utilstring2wstring(RootFileName); RootFileName = endsWith(wRootFileName, L"\\") ?
<string> #include <iostream> #pragma comment(lib,"Pathcch.lib") using namespace std; //将string转换成wstring wstring String2WString(string str) { wstring result; //获取缓冲区大小,并申请空间,缓冲区大小按字符计算 int 转换成string string WString2String(wstring wstr) { string result; //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 & path, std::wstring& cannoPath) { wchar_t tempArrPath[MAX_PATH] = { 0 }; if (path.empty() || wstrPath = String2WString(path); wchar_t tempArrPath[MAX_PATH] = { 0 }; if (wstrPath.empty()
如果要支持宽字符集和c string,上面的函数还可以衍生出下面的不同版本: // std::wstring版本 std::vector<std::wstring> ws_split(const std ::wstring& in, const std::wstring& delim) { std::wregex re{ delim }; return std::vector<std:: strlen(in),re, -1), std::cregex_token_iterator() }; } // 支持wchar_t宽字符集的版本 std::vector<std::wstring const wchar_t* in, const wchar_t* delim) { std::wregex re{ delim }; return std::vector<std::wstring +"); std::copy(ws_result.begin(), ws_result.end(), std::ostream_iterator<std::wstring, std::wstring
因为不同函数的参数名不同,类型不同,所以我们要做如下定义 typedef std::map<std::wstring, CComVariant> ParamsMap; class CExcuteMethod : public CWMI { public: CExcuteMethod(const wstring& wszNamespace, const std::wstring& wstrClass , const std::wstring& wstrInstanceName, const std::wstring& wstrMethod, const std::wstring& wstrRet ~CExcuteMethod(void); private: HRESULT Excute(CComPtr<IWbemServices> pSvc); private: std::wstring m_wstrInstanceName; std::wstring m_wstrClassName; std::wstring m_wstrMethod; std::wstring
#include <string> namespace gconvert { // ANSI->Unicode int ansi2uni(const std::string& ansi, std::wstring & uni); // Unicode->ANSI int uni2ansi(const std::wstring& uni, std::string& ansi); // UTF8->Unicode int utf82uni(const std::string& utf8, std::wstring& uni); // Unicode->UTF8 int uni2utf8(const std:: wstring& uni, std::string& utf8); // ANSI->UTF8 int ansi2utf8(const std::string& ansi, std::string& #endif namespace gconvert { #ifdef _WIN32 static int multi2uni(const std::string& multi, std::wstring
wsWxid = String2Wstring(wxid); wstring wsMsg = String2Wstring(msg); WxString wxMsg(wsMsg); WxString wxWxid(wsWxid); vector<wstring> vAtWxids; vector<WxString> vWxAtWxids; if ( 第一个地方: wstring wsWxid = String2Wstring(wxid); wstring wsMsg = String2Wstring(msg); WxString wxMsg(wsMsg); WxString wxWxid(wsWxid); 这里,为什么要先定义一个 wstring,再定义 WxString 呢? WxString wxMsg(String2Wstring(wxid)); 第二个地方: vector<wstring> vAtWxids; vector<WxString> vWxAtWxids
tmp.capacity(), _Format, marker); va_end(marker); _str = tmp.c_str(); return _str; } std::wstring & std_wstring_format(std::wstring & _str, const wchar_t * _Format, ...) { std::wstring tmp; %d,the dnum is %f"; string ret = std_string_format(strResult, format.c_str(), num, dnum); wstring strResult2; wstring format2 = L"the num is %d,the dnum is %f"; wstring ret2 = std_wstring_format ss.str(); wstringstream ws; ws << L"the num is " << num << L",the dnum is " << dnum; wstring
stdlib.h> #include <string> #pragma comment(lib, "dbghelp.lib") namespace FrameworkMiniDump { std::wstring GetTimeNowString(); std::string WStringToString(const std::wstring& str); std::wstring StringToWString , timeinfo); wcsftime(buffer, sizeof(buffer), L"%d-%m-%Y-%H-%M-%S", timeinfo); std::wstring str(buffer); return str; } std::wstring StringToWString(const std::string& str) wstr = std::wstring(result, GetModuleFileName(NULL, result, MAX_PATH)); return WStringToString
wmemset() 1.使用WideCharToMultiByte和MultiByteToWideChar; 2.使用mbstowcs_s和wcstombs_s(vs中添加_s); 3.使用c++11提供的wstring_convert include “string” #include “locale.h” #include #include “windows.h” using namespace std; //string 与 wstring 之间的转换 string ws2s(const wstring &ws) { //setlocale需要头文件#include “locale.h” string curLocale = setlocale (L"test s2ws:%ws\n", buf); wstring ws2 = L"12345"; string s2 = ws2s(ws2); char buf2[20] = { 0 }; s2. printf("test3 ws to s:%s\n", s5.c_str()); string s6("helloworld"); wstring ws6 = cv.from_bytes(s6);/
几种字符串之间的转换 字符串类型介绍 这里说的“字符串”包括string,’wstring’,’CString’。 wstring’ 是保存宽字符(wide character,C++中有wchar_t类型来表示宽字符)的字符串。字符串常量在初始化’wstring’类型对象时,前面要加“L”,用以表明是宽字符串。’ string name = “Aldex”; wstring w_name(name.begin(), name.end()); //1-2\. wstring to string wstring w_name6 =CStringW(c_name6); //in Unicode build wstring w_name6 = c_name6; return 相应地,wstring和int/float 可以通过wstring或者wostringstream和wistringstream来转换。 注意需要包含sstream头文件。
(&unicode[0]); } std::string ws2s(const std::wstring& ws) { std::string curLocale = setlocale(LC_ALL & wstr) { std::string ret; try { std::wstring_convert< std::codecvt_utf8<wchar_t> > wcv; ret = UTF8ToUnicode(const std::string & str) { std::wstring ret; try { std::wstring_convert< std::codecvt_utf8 = len) { ret.assign(buff.get(), len); } } return ret; } std::wstring ANSIToUnicode(const std: :string & str) { std::wstring ret; std::mbstate_t state = {}; const char *src = str.data(); size_t
的互相转换 7,1 WinApi方式 头文件 #include <windows.h> wstring string2wstring(string str) { wstring result; 转换成string string wstring2string(wstring wstr) { string result; //获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的 (const wstring& ws) { _bstr_t t = ws.c_str(); char* pchar = (char*)t; string result = pchar; return result; } wstring string2wstring(const string& s) { _bstr_t t = s.c_str( & input) { //std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; std::wstring_convert