使用vc一段时间了
发现VC的数据类型转换挺烦人了,特别是unicode环境下的类型转换
不知道有没有高手在这方面有研究的
烦请分享您宝贵的经验
谢谢

解决方案 »

  1.   

    C++标准函数库》中说的 
    有三个函数可以将字符串的内容转换为字符数组和C—string 
    1.data(),返回没有”\0“的字符串数组 
    2,c_str(),返回有”\0“的字符串数组 
    3,copy() 
    .................................................................
    int 转 CString:
    CString.Format("%d",int);
    ...............................
    string 转 CString 
    CString.format("%s", string.c_str()); 
    用c_str()确实比data()要好. 
    .......................................
    char* 转 CString 
    CString.format("%s", char*); CString strtest; 
    char * charpoint; 
    charpoint="give string a value"; 
    strtest=charpoint; //直接付值
    ...................................................................
    CString 转 int
    CString ss="1212.12"; 
    int temp=atoi(ss); //atoi _atoi64或atol将字符转换为整数,可以使用atoi、_atoi64或atol。 
    int int_chage = atoi((lpcstr)ss) ;
    或:
       CString str = "23";
       UINT uint;
       sscanf(str, "%d", uint);
    ..............................
    string 转 int
    ..............................
    char* 转 int 
    #include <stdlib.h> int atoi(const char *nptr); 
    long atol(const char *nptr); 
    long long atoll(const char *nptr); 
    long long atoq(const char *nptr); 
    ...................................................................
    CString 转 string
    string s(CString.GetBuffer()); 
    GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 
    ..........................................
    int 转 string 
    ..........................................
    char* 转 string 
    string s(char *); 
    你的只能初始化,在不是初始化的地方最好还是用assign().
    ...................................................................
    CString 转 char * 
    CString strtest="wwwwttttttt";
    charpoint=strtest.GetBuffer(strtest.GetLength()); CString转换 char[100] 
    char a[100]; 
    CString str("aaaaaa"); 
    strncpy(a,(LPCTSTR)str,sizeof(a));CString str="aaa";   
    char* ch;   
    ch=(char*)(LPCTSTR)str;
    ..........................................
    int 转 char *在stdlib.h中有个函数itoa() 
    itoa的用法: 
    itoa(i,num,10); 
    i 需要转换成字符的数字 
    num 转换后保存字符的变量 
    10 转换数字的基数(进制)10就是说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型 
    原形:char *itoa(int value, char* string, int radix); 
    实例: 
    #include "stdlib.h" 
    #include "stdio.h" 
    main() 

    int i=1234; 
    char s[5]; 
    itoa(i,s,10); 
    printf("%s",s); 
    getchar(); 
    }
    ..........................................
    string 转 char * 
    char *p = string.c_str(); string aa("aaa"); 
    char *c=aa.c_str(); string mngName; 
    char t[200]; 
    memset(t,0,200); 
    strcpy(t,mngName.c_str());
    ...................................................................
    标准C里没有string,char *==char []==string可以用CString.Format("%s",char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。cannot convert from 'const char *' to 'char *' 
      

  2.   

    一般UNICODE有前缀t 具体的函数名称只要你知道ANSI版本的 搜一下就OK了
      

  3.   

    UTF-8 转 Unicode, Unicode 转 GBK, UTF-8 转 GBK#include <windows.h>
    #include <stdio.h>void main() {//
    unsigned char utf8[] = "\xe8\x80\x81\xe5\xbe\x90";
    unsigned char unicode[] = "\x01\x80\x90\x5f";
    unsigned char ansi[] = "\xc0\xcf\xd0\xec";int len; //UTF-8转UNICODE
    len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)utf8, -1, NULL,0);
    WCHAR * wszUtf8 = new WCHAR[len+1];
    memset(wszUtf8, 0, len * 2 + 2);
    MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)utf8, -1, wszUtf8, len);MessageBoxW(NULL, (const wchar_t*)wszUtf8, NULL, MB_OK);//UNICODE转ANSI,实际上经过两次转换 UTF-8 已经变成了 GBK 编码
    len = WideCharToMultiByte(CP_ACP, 0, wszUtf8, -1, NULL, 0, NULL, NULL); 
    char *szGBK=new char[len + 1];
    memset(szGBK, 0, len + 1);
    WideCharToMultiByte (CP_ACP, 0, wszUtf8, -1, szGBK, len, NULL,NULL);MessageBoxA(NULL, (const char*)szGBK, NULL, MB_OK);delete[] szGBK;
    delete[] wszUtf8;}