unicode和多字节环境倒底什么不同?

matchPhone 2010-08-25 09:20:05
在unicode下我使用char型字符串,和多字节环境下使用char型字符串应该是一样的吧?
都是一个汉字两个字节,一个字母一个字节吧??我不太确定,请高手确认?
同样两种环境下使用wchar_t型字符串,一个字母都是两个字节吧??
两种环境下复制char都是用strlen吧?
复制wchar_t都是用_tcscpy吗?
这两个环境主要区别在哪里,难道就一个_T宏不同??
这些问题我现在都被这两个环境搞晕了,请高手确认理解是否有错误,万分感谢.
...全文
448 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyfree 2010-08-25
  • 打赏
  • 举报
回复
lz的理解基本正确,除了_t宏还有很多系统APi会在unicode和Multibyte下要求不同类型的参数,其他情况,如果显示指定,没有区别。
但实际上由于很多系统API和类库都是用的_t宏,所以如果设置不当,还是很麻烦。

feilongjilei 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackson35296 的回复:]
unicode环境下,所有的T类型和不指定类型的api都默认使用unicode版本,比如_T("abc")在unicode下为宽字符。但是char属于特定类型,和环境无关,因此是多字节的。再如CreateProcess,如果指定了unicode,参数里用字符串的都必须是unicode.像CString,TCHAR属于未指定类型,char,WCHAR,wchar_t属于指定类型
多字节环境下,所有……
[/Quote]
学习了
oyljerry 2010-08-25
  • 打赏
  • 举报
回复
Unicode是方向,现在编译器vc默认都是unicode的工程,这样一个好处就是统一,所有字符,都是2个字节来表示,而不像多字节,英文字符一个字节,汉字两个字节,处理起来也不是那么方便...
Windows内核实现也都是unicode编码
雪碧爱可乐 2010-08-25
  • 打赏
  • 举报
回复
1问,是;
2问,一个汉字还是两个字节,一个字母还是一个字节,但是存放在wchart_t里就相应变4字节,2字节;
3问,是的;
4问,是的;
5问,两种环境程序默认用编码不一样,你当然可以在同一环境下处理两种不同编码,但解析显示出来就必须按照相应的编码;
6问,看需求而定,只要编码一致即可,没有必要在这两种环境纠结!
向立天 2010-08-25
  • 打赏
  • 举报
回复
unicode和多字节主要是针对字符串说的
unicode是用一个字表示一个字符
而多字节可能是用1个或2个字节表示一个字符
unicode编码统一性更好
效率更高
而且现在windows的系统内核就是unicode的
对多字节的支持都是在内部将其转为unicode处理
所以应该习惯unicode的编程方式
微软通过宏的方式将有很多函数更具编译环境自动匹配多字节或unicode
_T就是其中之一
这也是为了给程序员具体编程带来方便
jackson35296 2010-08-25
  • 打赏
  • 举报
回复
unicode环境下,所有的T类型和不指定类型的api都默认使用unicode版本,比如_T("abc")在unicode下为宽字符。但是char属于特定类型,和环境无关,因此是多字节的。再如CreateProcess,如果指定了unicode,参数里用字符串的都必须是unicode.像CString,TCHAR属于未指定类型,char,WCHAR,wchar_t属于指定类型
多字节环境下,所有的T类型和不指定类型的api都默认使用多字节版本。对于CStringA CStringW char wchart_t WCHAR都不受影响

总之,unicode和多字节版本只影响未明显指定类型的类型,如_T(""),CString TCHAR CreateFile:。对于明确指定的类型无影响,如char wchar_t WCHAR CStringA CStringW CreateFileA CreateFileW L"" 。如果要兼容两个版本,所有的类型都用_T()的版本
用户 昵称 2010-08-25
  • 打赏
  • 举报
回复
有误,_tcscpy在不同环境下对应不同的具体函数,unicode与ansi可任意混用。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧