在VC6.0工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set)。
在vs2015工程中,默认字符集编码是Unicode。
带你玩转 Visual Studio——带你理解多字节编码与 Unicode 码(very good)
https://wiki.jikexueyuan.com/project/visual-studio/14.html
编码
ANSI (多字节字符集)
用多个(1-3个)字节来表示 1 个字符。
UNICODE:(宽字节字符集)
char* 转 CString
debug 可以看出strData的值为 L”1234” , 这里有L说明当前项目编码是 UNICODE,下面我们将
编码改为 ANSI 。
修改编码一般就是使用vs修改项目属性 字符集就可以了
此时
发现strData的值为 “1234” , 而不是 L”1234”
see:
https://www.jianshu.com/p/9804c28e21e8
LPARAM类型转化为CString类型
CString,int,LPARAM之间的转换
CString——————————>int
CString<——————————int
CString——————————>LPARAM
update:
解决PostMessage发送字符串造成数据错乱问题
使用PostMessage来发送字符串数据到主界面,由于字符串是临时变量,而PostMessage是异步发送,有时候由于主界面接收到数据的时候,系统已经将字符串占用的内存释放了,造成获取的字符串可能出现乱码的现象!
经过分析,主要是由于PostMessage是异步操作造成的。因为TMessage中的WParam是数值型,所以我们发送消息就只能发送字符串的起始地址,然后在接收端通过起始地址获得这个字符串的值。但是这样做会有一个隐形的问题,就是在栈上分配的内存,会在当前作用域结束后释放掉。
字符串前加 L 就变成宽字符 wchar_t 存储(用2Byte存1个字符)了,例如,L‘看’,L"abc啊";或_T("sf飞")
解决SendMessage发送字符汉字显示为乱码的问题
如果你发送的字符串是char类型即ascii,而工程却用了unicode(wchar),导致字符串解析出问题
step 1:首先要看你的工程设置
alt+F7,配置属性 -> 常规 -> 项目默认值 -> 字符集
step 2:api后面带A(比如SendMessageA)就表示此函数是ascii版本的,W就为unicode版本的,否则的话就为当前工程的字符设置,比如设置了unicode,SendMessage则默认就是SendMessageW,即unicode版本。
如果其字符集为未设置,SendMessage就自动替换为SendMessageA
VS2008默认字符集为Unicode,SendMessage默认替换为SendMessageW
既然用windows api,那你的程序铁定在windows(至少2000以后)上跑,所以除非是别人的代码你不想改,否则就用unicode版的api,不然的话系统还是在幕后转换为unicode再调用,调用后再转回非unicode给你的
配套改用swprintf
或者用_stprintf通用
除非是简单示例,可以少敲些字符而且一目了然,否则统统用unicode版的
char 改成 TCHAR
sprintf 改成 _stprintf
字符串用TEXT括起来,比如"test",改成TEXT("test");
关于多字节字符集项目中 汉字显示为乱码的问题
用DWORD关键字
parallel algorithms in C++17 we can now use:
to compute loops in parallel. The first parameter specifies the execution policy
http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t
https://www.shuzhiduo.com/A/ZOJPeVwP5v/
MFC与C#网络传输字符串时中文乱码