这配置能玩绝地求生大逃杀中配置吗 急在线等

C++ 宽字符(wchar_t)与窄字符(char)的转换
来源:博客园
了解
长度
宽字符wchar_t的长度16位,可以用来显示中文等除英文外的其他文字,
窄字符
8 位,只能处理英文。
哪里可以见到
在VS, 2013集成环境下面创建win32控制台工程后可以看到一个叫做 _tmain的主函数,其参数— int argc, _TCHAR* argv[],查看定义_TCHAR的定义就是wchar_t。

另外关于_tmain与main的区别,请看
转换函数
头文件 #include &stdlib&
函数原型
//宽字符转换为窄字符
errno_t wcstombs_s(
size_t *pReturnValue, //被修改的位数,作为返回的
char *mbstr,
//转换后字符串(窄)的空间指针
size_t sizeInBytes,
//我暂时理解为,允许操作窄字符缓冲区的字符的个数,
//要比count大1,不能大过缓冲区最大长度
const wchar_t *wcstr,
//指向要转换的宽字符字符串
size_t count ) ;
//要转换的宽字符的个数;
 
//窄字符转换为宽字符
errno_t mbstowcs_s(
size_t *pReturnValue, //被修改的位数,作为返回的 
wchar_t *wcstr,
//转换后宽字符串的缓冲区指针
size_t sizeInWords,
// 允许操作缓冲区中宽字符的个数
const char *mbstr,
//指向要转换的窄字符的字符串
size_t count
//要转换的窄字符的个数
);
 
操作
将宽字节的字符串转换为窄字符的字符串

#include &string&
#include &cstdlib&
std::string ws2s(const std::wstring& ws)
std::string curLocale = setlocale(LC_ALL, NULL);
// curLocale = "C";
setlocale(LC_ALL, "chs");
//中文地区
const wchar_t* _Source = ws.c_str();
size_t _Dsize =
ws.size() + 1;
//比要转换的宽字符个数大1
char *_Dest = new char[_Dsize];
memset(_Dest, 0, _Dsize);
//初始化缓冲区
size_
wcstombs_s(&i, _Dest, _Dsize, _Source, ws.size());
std::cout && "i:" && i && std::
std::string result = _D
delete[]_D
setlocale(LC_ALL, curLocale.c_str());
//设置回原来的locale
return
}

将窄字节的字符串转换为宽字符的字符串

std::wstring s2ws(const std::string& s)
std::string curlLocale = setlocale(LC_ALL,NULL);
setlocale(LC_ALL, "chs");
const char* _Source = s.c_str();
size_t _Dsize = s.size() + 1;
wchar_t* _Dest = new wchar_t[_Dsize];
size_
mbstowcs_s(&i, _Dest, _Dsize, _Source, s.size());
std::wstring result = _D
delete[] _D
setlocale(LC_ALL, curlLocale.c_str());
return
}

注意:窄字符与宽字符转换时要注意locale的转换,保存,与还原。
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动1086人阅读
字符分类:&&&&&宽字符函数普通C函数描述&
iswalnum()&&&&&isalnum()&测试字符是否为数字或字母&
iswalpha()&&&&&isalpha()&测试字符是否是字母&
iswcntrl()&&&&&iscntrl()&测试字符是否是控制符&
iswdigit()&&&&&isdigit()&测试字符是否为数字&
iswgraph()&&&&&isgraph()&测试字符是否是可见字符&
iswlower()&&&&&islower()&测试字符是否是小写字符&
iswprint()&&&&&isprint()&测试字符是否是可打印字符&
iswpunct()&&&&&ispunct()&测试字符是否是标点符号&
iswspace()&&&&&isspace()&测试字符是否是空白符号&
iswupper()&&&&&isupper()&测试字符是否是大写字符&
iswxdigit()&&&&&isxdigit()测试字符是否是十六进制的数字&
大小写转换:&&&&&
宽字符函数&&&&普通C函数描述&
towlower()&&&&&tolower()&把字符转换为小写&
towupper()&&&&&toupper()&把字符转换为大写&
字符比较:&&&&&宽字符函数普通C函数描述&
wcscoll()&&&&&strcoll()&比较字符串&
日期和时间转换:&
宽字符函数描述&
strftime()&&&&&根据指定的字符串格式和locale设置格式化日期和时间&
wcsftime()&&&&&根据指定的字符串格式和locale设置格式化日期和时间,&并返回宽字符串&
strptime()&&&&&根据指定格式把字符串转换为时间值,&是strftime的反过程&
打印和扫描字符串:&
宽字符函数描述&
fprintf()/fwprintf()&&&&&使用vararg参量的格式化输出&
fscanf()/fwscanf()&&&&&&&&&格式化读入&
printf()&&&&&&&&&&&&&使用vararg参量的格式化输出到标准输出&
scanf()&&&&&&&&&&&&&从标准输入的格式化读入&
sprintf()/swprintf()&&&&&根据vararg参量表格式化成字符串&
sscanf()&&&&&&&&&&&&&以字符串作格式化读入&
vfprintf()/vfwprintf()&&&&&使用stdarg参量表格式化输出到文件&
vprintf()&&&&&&&&&&&&&使用stdarg参量表格式化输出到标准输出&
vsprintf()/vswprintf()&&&&&格式化stdarg参量表并写到字符串&
数字转换:&
宽字符函数&&&&普通C函数描述&
wcstod()&&&&&strtod()&&把宽字符的初始部分转换为双精度浮点数&
wcstol()&&&&&strtol()&&把宽字符的初始部分转换为长整数&
wcstoul()&&&&&strtoul()&把宽字符的初始部分转换为无符号长整数&
多字节字符和宽字符转换及操作:&
宽字符函数描述&
mblen()&&&&&&&&&根据locale的设置确定字符的字节数&
mbstowcs()&&&&&&&&&把多字节字符串转换为宽字符串&
mbtowc()/btowc()&&&&把多字节字符转换为宽字符&
wcstombs()&&&&&&&&&把宽字符串转换为多字节字符串&
wctomb()/wctob()&&&&&把宽字符转换为多字节字符&
输入和输出:&
宽字符函数&&&&普通C函数描述&
fgetwc()&&&&&fgetc()&&&&&从流中读入一个字符并转换为宽字符&
fgetws()&&&&&fgets()&&&&&从流中读入一个字符串并转换为宽字符串&
fputwc()&&&&&fputc()&&&&&把宽字符转换为多字节字符并且输出到标准输出&
fputws()&&&&&fputs()&&&&&把宽字符串转换为多字节字符并且输出到标准输出串&
getwc()&&&&&getc()&&&&&从标准输入中读取字符,&并且转换为宽字符&
getwchar()&&&&&getchar()&&&&&从标准输入中读取字符,&并且转换为宽字符&
None&&&&&&&&&gets()&&&&&使用fgetws()&
putwc()&&&&&putc()&&&&&把宽字符转换成多字节字符并且写到标准输出&
putwchar()&&&&&putchar()&&&&&把宽字符转换成多字节字符并且写到标准输出&
None&&&&&&&&&puts()&&&&&使用fputws()&
ungetwc()&&&&&ungetc()&&&&&把一个宽字符放回到输入流中&
字符串操作:&
宽字符函数&&&&&&&&普通C函数描述&
wcscat()&&&&&&&&&strcat()&&&&&把一个字符串接到另一个字符串的尾部&
wcsncat()&&&&&&&&&strncat()&&&&&类似于wcscat(),&而且指定粘接字符串的粘接长度.&
wcschr()&&&&&&&&&strchr()&&&&&查找子字符串的第一个位置&
wcsrchr()&&&&&&&&&strrchr()&&&&&从尾部开始查找子字符串出现的第一个位置&
wcspbrk()&&&&&&&&&strpbrk()&&&&&从一字符字符串中查找另一字符串中任何一个字符第一次出现的位置&
wcswcs()/wcsstr()&&&&&strchr()&&&&&在一字符串中查找另一字符串第一次出现的位置&
wcscspn()&&&&&&&&&strcspn()&&&&&返回不包含第二个字符串的的初始数目&
wcsspn()&&&&&&&&&strspn()&&&&&返回包含第二个字符串的初始数目&
wcscpy()&&&&&&&&&strcpy()&&&&&拷贝字符串&
wcsncpy()&&&&&&&&&strncpy()&&&&&类似于wcscpy(),&同时指定拷贝的数目&
wcscmp()&&&&&&&&&strcmp()&&&&&比较两个宽字符串&
wcsncmp()&&&&&&&&&strncmp()&&&&&类似于wcscmp(),&还要指定比较字符字符串的数目&
wcslen()&&&&&&&&&strlen()&&&&&获得宽字符串的数目&
wcstok()&&&&&&&&&strtok()&&&&&根据标示符把宽字符串分解成一系列字符串&
wcswidth()&&&&&&&&&None&&&&&&&&&获得宽字符串的宽度&
wcwidth()&&&&&&&&&None&&&&&&&&&获得宽字符的宽度&
另外还有对应于memory操作的&wmemcpy(),&wmemchr(),&wmemcmp(),&wmemmove(),&wmemset().
TCHAR 函数对照表
Generic-text routine name
SBCS (_UNICODE & MBCS not defined)
_MBCS defined
_UNICODE defined
_fgettchar
_fgetwchar
_fputtchar
_fputwchar
_ftprintf_s
fwprintf_s
_ftscanf_s
_ismbcalnum
_ismbcalpha
_ismbcdigit
_ismbcgraph
Always returns false
_ismbblead
Always returns false
_istleadbyte
Always returns false
isleadbyte
Always returns false
Always returns true
_ismbclegal
Always returns true
_ismbclower
_ismbcprint
_ismbcpunct
_ismbcspace
_ismbcupper
_istxdigit
_sctprintf
_scwprintf
_sntprintf
_snwprintf
_sntprintf_s
_snprintf_s
_snprintf_s
_snwprintf_s
_sntscanf_s
_snscanf_s
_snscanf_s
_snwscanf_s
_stprintf_s
swprintf_s
_stscanf_s
_taccess_s
_waccess_s
_tasctime_s
_wasctime_s
Maps to macro or inline function
Maps to macro or inline function
Maps to macro or inline function
Maps to macro or inline function
Maps to macro or inline function
Maps to macro or inline function
_tcprintf_s
_cprintf_s
_cprintf_s
_cwprintf_s
_tcscanf_s
_cwscanf_s
_tcsclen_s
_tcserror_s
strerror_s
strerror_s
_wcserror_s
_tcsncat_s
_mbsnbcat_s
_tcsnccmp_s
_mbsncmp_s
_tcsnccoll
_tcsnccpy_s
_mbsncpy_s
_tcsncicmp
_tcsncicoll
_strnicoll
_mbsnicoll
_wcsnicoll
_tcsncpy_s
_mbsnbcpy_s
_mbsnbicmp
_tcsnicoll
_strnicoll
_mbsnbicoll
_wcsnicoll
_tcstoui64
_strtoui64
_strtoui64
_wcstoui64
_tctime32_s
_ctime32_s
_ctime32_s
_wctime32_s
_tctime64_s
_ctime64_s
_ctime64_s
_wctime64_s
_tfindfirst
_findfirst
_findfirst
_wfindfirst
_tfindnext
_wfindnext
_tfindnext32
_findnext32
_findnext32
_wfindnext32
_tfindnext64
_findnext64
_findnext64
_wfindnext64
_tfindnexti64
_findnexti64
_findnexti64
_wfindnexti64
_tfindnexti6432
_findnexti6432
_findnexti6432
_wfindnexti6432
_tfindnext32i64
_findnext32i64
_findnext32i64
_wfindnext32i64
_tfreopen_s
_wfreopen_s
_tfullpath
_wfullpath
_tgetenv_s
_wgetenv_s
_tmakepath
_wmakepath
_tmakepath_s
_makepath_s
_makepath_s
_wmakepath_s
_tmktemp_s
_wmktemp_s
_mbctolower
_mbctoupper
_tprintf_s
_tputenv_s
_wputenv_s
_tsearchenv
_searchenv
_searchenv
_wsearchenv
_tsearchenv_s
_searchenv_s
_searchenv_s
_wsearchenv_s
_tsetlocale
_wsetlocale
_tspawnlpe
_wspawnlpe
_tspawnvpe
_wspawnvpe
_tsplitpath
_splitpath
_splitpath
_wsplitpath
_tstrdate_s
_strdate_s
_strdate_s
_wstrdate_s
_tstrtime_s
_strtime_s
_strtime_s
_wstrtime_s
_ttmpnam_s
_wtmpnam_s
_ui64tot_s
_ui64toa_s
_ui64toa_s
_ui64tow_s
_vftprintf
_vftprintf_s
vfprintf_s
vfprintf_s
vfwprintf_S
_vsctprintf
_vscprintf
_vscprintf
_vscwprintf
_vsctprintf_s
_vscprintf_s
_vscprintf_s
_vscwprintf_S
_vsntprintf
_vsnprintf
_vsnprintf
_vsnwprintf
_vsntprintf_s
_vsnprintf_s
_vsnprintf_s
_vsnwprintf_s
_vstprintf
_vstprintf_s
vsprintf_s
vsprintf_s
vswprintf_s
_vtprintf_s
vwprintf_s
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:106518次
积分:1544
积分:1544
排名:千里之外
原创:21篇
转载:205篇
(2)(5)(2)(4)(19)(6)(6)(23)(16)(15)(20)(21)(26)(6)(32)(25)(2)CString string 的相互转化,宽字符,多字符的转换
在本文开始之处,先简要地说一下何为短字符和宽字符.
所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码.(也就是我们常说的多字符集(普通的字符串就是这个))而宽字符
,顾名思义,就是用16bit表示的字符,典型的有UNICODE(MFC中的CString就是一个).关于windows下的ASCII和UNICODE的更多信息,
可以参考这两本经典著作:《windows 程序设计》,《windows 核心》.这两本书关于这两种字符都有比较详细的解说.
L表示long, P表示指针,C表示constant,W表示wide,T:win32环境中有一个_T宏,用来标识字符是否采用Unicode编码(两字节表示一个字符),若程序中定义了Unicode,该字符/字符串被作为Unicode字符串,否则就是标准的ANSI(单字节表示一个字符)字符串。
STR:表示这个变量是一个字符串。
1:LPTSTR = char*:
2:LPCSTR(多个C) 表示常字符串
3:LPTSTR (多个T) 表示取决于Unicode宏是否定义
4:LPCTSTR (多个C) 解释同2
5:LPWSTR 表示Unicode字符串(宽字符串)
6:LPCWSTR (多个C) 解释同2
一个例子,CString string 的相互转化
////string
(短字符到宽字符)
CString strTemp1;
string strTemp_1 = "sdddasdfasdf";
int nLen = MultiByteToWideChar(CP_ACP, 0, strTemp_1.c_str(), -1, NULL, 0);
MultiByteToWideChar(CP_ACP, 0, strTemp_1.c_str(), -1, strTemp1.GetBuffer(), nLen);
////CString
(宽字符到多//字///符)
CString strTemp1("sdddasdfasdf");
string strTemp_1 ;
DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, strTemp1.GetBuffer(), -1, NULL, 0, NULL, FALSE);
WideCharToMultiByte(CP_OEMCP, NULL, strTemp1.GetBuffer(), -1,(LPSTR)strTemp_1.c_str(), dwNum, NULL, FALSE);
1)多字符(短字符跟多字符一个意思)转换宽多字符
char sText[20] = {"多字节字符串!OK!"};/////多字符集(8bit)
我们需要知道转化后的宽字符需要多少个数组空间,
所幸,我们能够确知所需要的数组空间.
我们只需要将MultiByteToWideChar()的第四个形参设为-1,即可返回所需的短字符数组空间的个数:
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, sText, -1, NULL, 0);
接下来,我们只需要分配响应的数组空间:
wchar_t *pwT
pwText = new wchar_t[dwNum];
if(!pwText)
delete []pwT
接着,我们就可以着手进行转换了.在这里以转换成ASCII码做为例子:
MultiByteToWideChar (CP_ACP, 0, pwText, -1, sText, dwSize);
最后,使用完毕当然要记得释放占用的内存:
delete []pwT
(2)宽字符集转换为多字符集(短字符跟多字符一个意思)
wchar_t wText[20] = {L"宽字符转换实例!OK!"};
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL, wText,-1,NULL,0,NULL,FALSE);
psText = new char[dwNum];
if(!psText)
delete []psT
WideCharToMultiByte (CP_OEMCP,NULL,wText,-1,psText,dwNum,NULL,FALSE);
delete []psT2009年7月 总版技术专家分月排行榜第二2009年3月 总版技术专家分月排行榜第二2009年1月 总版技术专家分月排行榜第二2005年7月 总版技术专家分月排行榜第二2005年5月 总版技术专家分月排行榜第二2005年3月 总版技术专家分月排行榜第二
优秀小版主2015年8月优秀小版主2015年9月优秀小版主2015年5月优秀小版主2015年2月论坛优秀版主
本帖子已过去太久远了,不再提供回复功能。博客访问: 323127
博文数量: 77
博客积分: 5000
博客等级: 大校
技术积分: 520
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
字符分类:
宽字符函数
iswalnum()
isalnum()
测试字符是否为数字或字母
iswalpha()
isalpha()
测试字符是否是字母
iswcntrl()
iscntrl()
测试字符是否是控制符
iswdigit()
isdigit()
测试字符是否为数字
iswgraph()
isgraph()
测试字符是否是可见字符
iswlower()
islower()
测试字符是否是小写字符
iswprint()
isprint()
测试字符是否是可打印字符
iswpunct()
ispunct()
测试字符是否是标点符号
iswspace()
isspace()
测试字符是否是空白符号
iswupper()
isupper()
测试字符是否是大写字符
iswxdigit()
isxdigit()
测试字符是否是十六进制的数字
大小写转换:
宽字符函数
towlower()
tolower()
把字符转换为小写
towupper()
toupper()
把字符转换为大写
字符比较:
宽字符函数
wcscoll()
strcoll()
比较字符串
日期和时间转换:
宽字符函数
strftime()
根据指定的字符串格式和locale设置格式化日期和时间
wcsftime()
根据指定的字符串格式和locale设置格式化日期和时间, 并返回宽字符串
strptime()
根据指定格式把字符串转换为时间值, 是strftime的反过程
打印和扫描字符串:
宽字符函数
fprintf()/fwprintf()
使用vararg参量的格式化输出
fscanf()/fwscanf()
格式化读入
printf()
使用vararg参量的格式化输出到标准输出
从标准输入的格式化读入
sprintf()/swprintf()
根据vararg参量表格式化成字符串
sscanf()
以字符串作格式化读入
vfprintf()/vfwprintf()
使用stdarg参量表格式化输出到文件
vprintf()
使用stdarg参量表格式化输出到标准输出
vsprintf()/vswprintf()
格式化stdarg参量表并写到字符串
数字转换:
宽字符函数
wcstod()
strtod()
把宽字符的初始部分转换为双精度浮点数
wcstol()
strtol()
把宽字符的初始部分转换为长整数
wcstoul()
strtoul()
把宽字符的初始部分转换为无符号长整数
多字节字符和宽字符转换及操作:
宽字符函数
根据locale的设置确定字符的字节数
mbstowcs()
把多字节字符串转换为宽字符串
mbtowc()/btowc()
把多字节字符转换为宽字符
wcstombs()
把宽字符串转换为多字节字符串
wctomb()/wctob()
把宽字符转换为多字节字符
输入和输出:
宽字符函数
fgetwc()
从流中读入一个字符并转换为宽字符
fgetws()
从流中读入一个字符串并转换为宽字符串
fputwc()
把宽字符转换为多字节字符并且输出到标准输出
fputws()
把宽字符串转换为多字节字符并且输出到标准输出串
从标准输入中读取字符, 并且转换为宽字符
getwchar()
getchar()
从标准输入中读取字符, 并且转换为宽字符
使用fgetws()
把宽字符转换成多字节字符并且写到标准输出
putwchar()
getchar()
把宽字符转换成多字节字符并且写到标准输出
使用fputws()
ungetwc()
ungetc()
把一个宽字符放回到输入流中
字符串操作:
宽字符函数
wcscat()
strcat()
把一个字符串接到另一个字符串的尾部
wcsncat()
strncat()
类似于wcscat(), 而且指定粘接字符串的粘接长度.
wcschr()
strchr()
查找子字符串的第一个位置
wcsrchr()
strrchr()
从尾部开始查找子字符串出现的第一个位置
wcspbrk()
strpbrk()
从一字符字符串中查找另一字符串中任何一个字符第一次出现的位置
wcswcs()/wcsstr()
strchr()
在一字符串中查找另一字符串第一次出现的位置
wcscspn()
strcspn()
返回不包含第二个字符串的的初始数目
wcsspn()
strspn()
返回包含第二个字符串的初始数目
wcscpy()
strcpy()
拷贝字符串
wcsncpy()
strncpy()
类似于wcscpy(), 同时指定拷贝的数目
wcscmp()
strcmp()
比较两个宽字符串
wcsncmp()
strncmp()
类似于wcscmp(), 还要指定比较字符字符串的数目
wcslen()
strlen()
获得宽字符串的数目
wcstok()
strtok()
根据标示符把宽字符串分解成一系列字符串
wcswidth()
获得宽字符串的宽度
wcwidth()
获得宽字符的宽度
另外还有对应于memory操作的 wmemcpy(), wmemchr(), wmemcmp(), wmemmove(), wmemset().
X 窗口系统下支持中文的函数
支持西文的函数
支持中文的函数
XCreateFontSet
载入字体集
XTextExtents(16)
Xmb/wcTextExtents Xmb/wcTextPerCharExtents
返回文本的限制框
XDrawString
Xmb/wcDrawString
在窗口中画字符串, 背景填充
XDrawImageString
Xmb/wcDrawImageString
在窗口中画字符串
Xmb/wcDrawText
在窗口中画字符串
XLookupString
Xmb/wcLookupString
查找字符串
阅读(9611) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 绝地求生大逃杀i3配置 的文章

 

随机推荐