关于MultiByteToWideChar与WideCharToMultiByte代码测试(宽字符与多字节字符的转换)以及字符串的转换代码测试

时间:2023-01-16 17:11:29
 #pragma once
#include <stdio.h> //getchar()
#include <tchar.h>
#include <stdlib.h> //sysytem()
#include <string> //std
#include <atlstr.h> //cstring
#include <iostream> //cout using namespace std;
using std::wcout; int _tmain(int argc, _TCHAR* argv[])
{
/***** char* 转换 cstring *********/
//方式一 直接赋值
//char chArray[] = "This a cat!";
// char* p = "This a cat!";
//LPSTR p = "This a cat!";
//CString cstr = p;
//方式二 format格式转化
//CString cstr1;
//cstr1.Format("%s",p);
//cout<< cstr1 << endl;
/************ cstring转换char* ************/
//方式一(LPSTR)(LPCTSTR)强转
//CString thecstring("this a cat!");
//char *cp;
//*cp = (LPSTR)(LPCTSTR)thecstring;
//方式二 使用strcpy
//cp = new TCHAR[thecstring.GetLength() + 1];
//_tcscpy_s(cp,thecstring.GetLength() + 1, thecstring);
//方式三 使用CString::GetBuffer()
//CString s(_T("this a cat!"));
//LPTSTR cp = s.GetBuffer();
//cout<< cp << endl;
//if (NULL != cp)
//{
// *cp = _T('\0');
//*cp = _T('123');输出为 3his a cat 截断了字符
//}
//s.ReleaseBuffer(); //cout<< cp << endl; /********* WideCharToMultiByte(Unicode to Ansi) *************/
wchar_t wText[] = {L"宽字符转成窄字符!"};
DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, wText, -, NULL,,NULL,FALSE);
char* psText;
psText = new char[dwNum];
if (!psText)
{
delete []psText;
}
WideCharToMultiByte(CP_OEMCP, NULL, wText, -,psText, dwNum, NULL, FALSE); cout << psText << endl;
delete []psText;
psText = NULL; /********* MultiByteToWideChar(Ansi to Unicode) *************/
char cText[] = {"窄字符转成宽字符!"};
DWORD dwNum1 = MultiByteToWideChar(CP_ACP, NULL,cText, -, NULL, );
wchar_t* pwText;
pwText = new wchar_t[dwNum1];
if (!pwText)
{
delete []pwText;
}
MultiByteToWideChar(CP_ACP, NULL, cText, -, pwText, dwNum1);
wchar_t wsz[] = L"ni hao a!";//宽字符和宽字符串常量前要加L
//变量里存放的是中文的话,要设置区域使用wcout.imbue(locale("chs"));
//才能输出变量里面的中文,不然输出的是变量地址
    //还可以设置全局函数setlocale(LC_ALL,"Chinese-simplified");
     wcout.imbue(locale("chs"));
std::wcout << wsz << std::endl;
std::wcout << pwText << std::endl;
delete []pwText;
pwText = NULL;
//getchar();
system("pause");
return ;
}
WideCharToMultiByte
函数功能:该函数映射一个unicode字符串到一个多字节字符串。
函数原型:
int WideCharToMultiByte(
UINT CodePage, //指定执行转换的代码页
DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符
LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区
int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区字符个数
LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区
int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值
LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符
LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
);
参数:
CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。你也可以指定其为下面的任意一值:
CP_ACP:ANSI代码页;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;
CP_SYMBOL:符号代码页(42);CP_THREAD_ACP:当前线程ANSI代码页;
CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。
函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串。由该函数映射的字符串没必要是多字节字符组。
函数原型:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);

关于MultiByteToWideChar与WideCharToMultiByte代码测试(宽字符与多字节字符的转换)以及字符串的转换代码测试的更多相关文章

  1. 通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  2. unicode字符和多字节字符的相互转换接口

    作者:朱金灿 来源:http://blog.csdn.net/clever101 发现开源代码的可利用资源真多,从sqlite3的源码中抠出了几个字符转换接口,稍微改造下了发现还挺好用的.下面是实现代 ...

  3. ANIS与UNICODE字符格式转换:MultiByteToWideChar&lpar;&rpar; 和WideCharToMultiByte&lpar;&rpar; 函数

    资料来自: http://blog.csdn.net/holamirai/article/details/47948745 http://www.cnblogs.com/wanghao111/arch ...

  4. MultiByteToWideChar和WideCharToMultiByte用法详解&comma; ANSI和UNICODE之间的转换

    //========================================================================//TITLE://    MultiByteToW ...

  5. MultiByteToWideChar和WideCharToMultiByte用法详解

    今天写ini文件的时候发现的问题: TCHAR temp[]; //strcpy_s(temp, request.newVersion); MultiByteToWideChar(CP_ACP, , ...

  6. UNICODE和ANSI字符串的转换(解释了MultiByteToWideChar,WideCharToMultiByte,GetTextCharsetInfo,GetTextCharset,IsDBCSLeadByte,IsDBCSLeadByteEx,IsTextUnicode一共7个函数)

    继上集故事<多字符集(ANSI)和UNICODE及字符串处理方式准则 >,我们现在有一些特殊需求: 有时候我们的字符串是多字符型,我们却需要使用宽字符型:有的时候却恰恰相反. Window ...

  7. 使用Unicode&lpar;宽字节字符集&rpar;;多字节字符集中定义宽字节变量

    2012-03-25 14:54 (分类:计算机程序) 2.2 宽字符和C 宽字符不一定是Unicode.Unicode是宽字符集的一种.然而,因为本书的焦点是Windows而不是C执行的理论,所以书 ...

  8. C&plus;&plus;多字节字符转换为宽字符的两种方法

    目前知道有两种方式:可以提供宽字符与ANSI字符之间的转换, 第一种由COM库提供的函数 char*  _com_util::ConvertBSTRToString(BSTR ); BSTR _com ...

  9. warning&colon; C4819&colon; 该文件包含不能在当前代码页&lpar;936&rpar;中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    ------问题-------------------- Qt项目使用 VC++ 编译器出现此错误. warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 ...

随机推荐

  1. &lbrack;&period;NET逆向&rsqb; &period;net IL 指令速查(net破解必备)

    .net的破解比较特殊,很多人看见IL就头疼,最近在研究的时候发现了这个东东 相信对广大学习net破解的人一定有帮助 .对上指令表一查,跟读原代码没什么区别了, 名称 说明 Add 将两个值相加并将结 ...

  2. RedHat Linux下利用sersync进行实时同步数据

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linux5588.blog.51cto.com/65280/772054 拓扑图 ...

  3. HDU-1236 排名

    http://acm.hdu.edu.cn/showproblem.php?pid=1236 学会怎样按字典序排序的模板. 排名 Time Limit: 2000/1000 MS (Java/Othe ...

  4. ACM第四次积分赛

    虽然因为第一题给的数据有问题,没能四道题都做出来,但是这次第四名,进步很大,继续努力! SAU-ACM总比赛成绩       姓名     账号  上学期成绩 第一次成绩 第二次成绩 第三次成绩 第四 ...

  5. mipi 调试经验(转)

    以下是最近几个月在调试 MIPI DSI / CSI 的一些经验总结,因为协议有专门的文档,所以这里就记录一些常用知识点: 一.D-PHY 1.传输模式 LP(Low-Power) 模式:用于传输控制 ...

  6. (五)Jquery Mobile列表

    Jquery Mobile列表 一.JM列表 1.普通列表            效果:            带序号的列表 将ul换成ol      效果:       2.data-inset=& ...

  7. App功能测试

    App功能测试 1.  运行 1)App安装完成后的试运行,可正常打开软件. 2)App打开测试,是否有加载状态进度提示. 3)App页面间的切换是否流畅,逻辑是否正确. 4)注册 同表单编辑页面 用 ...

  8. Linux进程退出详解&lpar;do&lowbar;exit&rpar;--Linux进程的管理与调度&lpar;十四&rpar;

    Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别 ...

  9. linux shell中&quot&semi;2&gt&semi;&amp&semi;1&quot&semi;含义

    在计划任务中经常可以看到.例如我们公司的计划任务举例: */ * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task ...

  10. 通用Mapper相关

    1.通用Mapper中,用@Table来映数据表与实体,其中 name:指定表的名称,例如@Table(name="ls_post") catalog: 指定数据库名称,默认为当前 ...