在unicode下我使用char型字符串,和多字节环境下使用char型字符串应该是一样的吧?
都是一个汉字两个字节,一个字母一个字节吧??我不太确定,请高手确认?
同样两种环境下使用wchar_t型字符串,一个字母都是两个字节吧??
两种环境下复制char都是用strlen吧?
复制wchar_t都是用_tcscpy吗?
这两个环境主要区别在哪里,难道就一个_T宏不同??
这些问题我现在都被这两个环境搞晕了,请高手确认理解是否有错误,万分感谢.

解决方案 »

  1.   

    有误,_tcscpy在不同环境下对应不同的具体函数,unicode与ansi可任意混用。
      

  2.   

    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()的版本
      

  3.   

    unicode和多字节主要是针对字符串说的
    unicode是用一个字表示一个字符
    而多字节可能是用1个或2个字节表示一个字符
    unicode编码统一性更好
    效率更高
    而且现在windows的系统内核就是unicode的
    对多字节的支持都是在内部将其转为unicode处理
    所以应该习惯unicode的编程方式
    微软通过宏的方式将有很多函数更具编译环境自动匹配多字节或unicode
    _T就是其中之一
    这也是为了给程序员具体编程带来方便
      

  4.   

    1问,是;
    2问,一个汉字还是两个字节,一个字母还是一个字节,但是存放在wchart_t里就相应变4字节,2字节;
    3问,是的;
    4问,是的;
    5问,两种环境程序默认用编码不一样,你当然可以在同一环境下处理两种不同编码,但解析显示出来就必须按照相应的编码;
    6问,看需求而定,只要编码一致即可,没有必要在这两种环境纠结!
      

  5.   

    Unicode是方向,现在编译器vc默认都是unicode的工程,这样一个好处就是统一,所有字符,都是2个字节来表示,而不像多字节,英文字符一个字节,汉字两个字节,处理起来也不是那么方便...
    Windows内核实现也都是unicode编码
      

  6.   

    lz的理解基本正确,除了_t宏还有很多系统APi会在unicode和Multibyte下要求不同类型的参数,其他情况,如果显示指定,没有区别。
    但实际上由于很多系统API和类库都是用的_t宏,所以如果设置不当,还是很麻烦。