CString转String详解

一、CString转String函数

CString是MFC(Microsoft Foundation Class)中提供的一种字符串类,而String是C++11标准中的字符串类。在两者之间进行转换是很常见的操作。可以使用CString::GetString函数将CString对象转换为char*类型,然后再将char*类型转换为string类型。

    CString cstr = "Hello World!";
    std::string str(cstr.GetString());
    std::cout << str << std::endl;

在使用GetString函数时需要注意,如果CString对象被修改,那么返回的指针也会指向修改后的字符串,因此必须保证在使用指针之前CString对象不会被修改。

二、CString转char数组

使用ConvertUnicodeToMultiByte函数将CString对象转换为char数组。

    CString cstr = "Hello World!";
    char s[100];
    WideCharToMultiByte(CP_ACP, NULL, cstr, -1, s, 100, NULL, NULL);
    std::cout << s << std::endl;

其中WideCharToMultiByte是Windows API中将Unicode编码的字符转换为多字节字符集的函数。

三、CString转String utf8

使用CT2CA函数将CString对象转换为char*类型,然后再将char*类型转换为string类型,CT2CA 默认将CString转换为UTF-8字符串。

    CString cstr = "Hello World!";
    std::string utf8str(CT2CA(cstr));
    std::cout << utf8str << std::endl;

四、CString转String出错

CString到string的转换可能会出现乱码,特别是在多字节字符集(如GBK)中常常出现这种情况。如果出现乱码,最好的解决办法是使用Unicode字符集。

如果一定要使用多字节字符集,可以先将CString转换为wchar_t数组,再将wchar_t数组转换为char数组,并指定正确的代码页。

    CString cstr = "你好世界!";
    wchar_t wsz[100];
    wcscpy_s(wsz, cstr);
    char s[100];
    WideCharToMultiByte(CP_ACP, NULL, wsz, -1, s, 100, NULL, NULL);//这里的-1 是因为WideCharToMultiByte函数在 NULL字符时能够自己计算长度
    std::cout << s << std::endl;

五、CString转String^

CString到String^可以使用marshal_as函数进行转换,需要包含头文件msclr/marshal_cppstd.h

    #include 
    CString cstr = "Hello World!";
    String^ str = msclr::interop::marshal_as<String^>(CString(cstr));
    Console::WriteLine(str);

六、CString转char

将CString对象转换为char类型可以使用(LPCTSTR)强制转换。

    CString cstr = "H";
    char c = (LPCTSTR)cstr;
    std::cout << c << std::endl;

七、CString转double

将CString对象转换为double类型可以使用_tstof函数。

    CString cstr = "3.1415926";
    double pi = _tstof(cstr);
    std::cout << pi << std::endl;

八、CString转换为String

使用CT2T函数将CString对象转换为CT2T<CString, strtype>类型,然后再通过ToString函数将其转换为String类型。

    CString cstr = "Hello World!";
    String^ str = gcnew String(CT2T<CString, strtype>(cstr).ToString());
    Console::WriteLine(str);

九、CString转byte数组

使用wstring类型临时转换,然后使用reinterpret_cast强制转换为unsigned char*类型的指针即可。

    CString cstr = "Hello World!";
    std::wstring wstr = CT2W(cstr);
    unsigned char* bytes = reinterpret_cast(wstr.c_str());
    int len = wstr.size() * sizeof(wchar_t);
    for (int i = 0; i < len; ++i)
    {
        std::cout << (int)bytes[i] << " ";
    }
    std::cout << std::endl;

总之,CString到String的转换虽然看起来很简单,但是却需要注意很多细节。希望本文能够帮助到需要进行CString到String转换的开发者。

原创文章,作者:RDEI,如若转载,请注明出处:https://www.506064.com/n/150014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
RDEIRDEI
上一篇 2024-11-05 16:55
下一篇 2024-11-07 09:48

相关推荐

  • c# enum转换成string

    本文将从以下几个方面详细阐述c#中enum类型转换成string类型的方法及注意事项。 一、基本语法和示例 c#中的enum类型可以看作是一组有名字的常量值,通常用于定义一组相关的…

    编程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一种用于进行身份验证的标准。在使用JWT时,经常会遇到“JWT String Argument Cannot Be Null or Empt…

    编程 2025-04-27
  • Python中String包含的进阶应用

    对于Python程序员而言,String类型的操作是日常工作中必不可少的一部分。String包含的操作很多,其中最基础的操作就是判断一个字符串是否包含另一个字符串。本篇文章将对Py…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25

发表回复

登录后才能评论