字符串转化

LPCTSTR的含义

L表示long指针, 这是为了兼容Windows 3.116位操作系统遗留下来的, win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。

 

P表示这是一个指针,C表示是一个常量TWin32环境中, 有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。STR表示这个变量是一个字符串。

 

所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。同样, LPCSTR就只能是一个ANSI字符串,在程序中我们大部分时间要使用带T的类型定义。LPCTSTR == const TCHAR *

 

LPPwin32中是等效的,都是指针的意思。  

PTSTR的定义 typedef LPWSTR PTSTR, LPTSTR;

    STR表示字符串。  

    问题就出在T上面。  

    T是一个宏,当没定义unicode时为空,定义unicode后表示为宽字符。  

    所以当定义unicode后,PTSTR转换为PSTRLPSTR,一样意思)就不能直接转换了,因为一个是unicode,一个是ascii  

    结论:unicode下,PTSTR转换为PSTR是个编码转换问题。  

    编码转换可以用MS的函数完成。  

   WideCharToMultiByteunicode转换成ascii  

  MultiByteToWideCharascii转换成unicode

 

 运行环境:vc6

LPTSTR 转到string

LPTSTR lp="ddd";

string str=(string)lp;

 

string转成LPTSTR

string str="dddd";

    LPTSTR lp=const_cast<char*>(str.c_str());

 

 

运行环境:vs2008 win 5.0 PPC

Wchar_t *Cstring

   wchar_t * ddd = L"ok";

    CString dddd(ddd);

 

Wchar_t *LPTSTR)转string

string WcharToString(wchar_t* temp)

{

        char chars[MAX_PATH];

        WideCharToMultiByte(CP_ACP,0,temp,-1,chars,MAX_PATH,NULL,NULL);

        string str = (string)chars;

        return str;

}

 

IntCString

int i = 3;

    CString dd;

    dd.Format(L"%d",i);

 

CStringint

   int i;

   CString str = L"3";

   i = _wtoi(str);

 

char*CString(有乱码问题)

   char* str = "char";

   CString Cstr;  

   Cstr.Format(L"%s",str);

 

CStringstring

    char* pElementText;

    int iTextLen;

    iTextLen = WideCharToMultiByte(CP_ACP,0,errorTime,-1,NULL,0,NULL,NULL );

    pElementText = new char[iTextLen + 1];

    memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );

    WideCharToMultiByte( CP_ACP,0,errorTime,-1,pElementText,iTextLen,NULL,NULL );

    string errorText = pElementText;

    delete[] pElementText;

 

 

/*转换UTF-8编码为本地编码*/

string CMobileVideoApp::utfToAcp(string cstr)

{

    int  unicodeLen = MultiByteToWideChar( CP_UTF8,0,cstr.c_str(),-1,NULL,0);

    wchar_t *  pUnicode;

    pUnicode = new  wchar_t[unicodeLen+1];

    memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); 

    MultiByteToWideChar( CP_UTF8,0,cstr.c_str(),-1,(LPWSTR)pUnicode,unicodeLen );

    wstring  rt;

    rt = ( wchar_t* )pUnicode;

    delete  pUnicode;

 

    char* pElementText;

    int iTextLen;

    iTextLen = WideCharToMultiByte(CP_ACP,0,rt.c_str(),-1,NULL,0,NULL,NULL );

    pElementText = new char[iTextLen + 1];

    memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );

    WideCharToMultiByte( CP_ACP,0,rt.c_str(),-1,pElementText,iTextLen,NULL,NULL );

    string strText;

    strText = pElementText;

    delete[] pElementText;

    return strText;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值