• c++字符串机理


    在windows编程中,由于编码方式的不同和c与c++的不同而造成了许多复杂的有关字符串之间的转换

    首先,windows编码方式有ANSCLL和UNICODE,前者是单字符的,后者是双字符的。

    然后,char*理所当然是单字符的,string也是单字符的,而CString是Tchar的。

    那么什么是TCHAR呢,它在采用ANSCLL的编码中表示单字符,在UNICODE编码中表示双字符,定义如下

    如果定义_UNICODE,声明如下:     typedef   wchar_t   TCHAR;    

    如果没有定义_UNICODE,则声明如下:     typedef   char   TCHAR; 

    而我们可以采用宏来告诉编译器来以什么编码方式来保存字符常量

    _T一般同字常数相关,如_T("Hello"。如果你编译一个 程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T 和_L的区别在于,_L不管你是以什么方式编译,一律UNICODE方式保存.

    而根据字符串类型的命名我们也很容易看出LPTSTR、LPCTSTR是Tchar类型的字符串指针LPSTR,LPCSTR是char*的字符串指针,LPWSTR,LPCWSTR是UNIcode编码的字符串指针。

    你可以使用Microsoft在ATL里面提供的宏来进行转换
    #include <atlbase.h>
    USES_CONVERSION;
    LPCWSTR pw = T2W("Hello,world!"); // tchar -> wchar
    LPCTSTR pt = W2T(L"Hello,world!"); // wchar -> tchar
    等等.而LPTSTR与LPSTR是可以进行强制类型转换的,好像在CStrng中定义了这种强制类型转换。这样这三种类型就能相互转换了。

    string向char*转换的方式是char*=string.c_str(),

    char*向string转换直接赋值就行,应该是隐式的调用了string的构造函数。

    string CString
    CString.format(”%s”, string.c_str());

    CString string
    string s(CString.GetBuffer());

    GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.

    CStringchar *

    CString cstr;

     

    char *p =(LPSTR)(LPCTSTR)cstr;

    char CString
    CString.format(”%s”, char*);

     

  • 相关阅读:
    PHP
    思科模拟器
    路由器
    服务器
    Windows Server 2008 笔记【瞎写】
    Day1 T3 数列
    java中自定义excel模板并且填充内容
    springMVC接收值list时,超过256出现IndexOutOfBoundsException
    java将日期转换成周几
    两个tomcat配置各自的SSL证书(前后端分离)
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/3891576.html
Copyright © 2020-2023  润新知