Visual C++ .NET 中 System::String^ 和 char * 互转
发布日期:2021-06-28 21:10:48 浏览次数:2 分类:技术文章

本文共 1306 字,大约阅读时间需要 4 分钟。



原文链接:

使用 Visual C++ .NET 中的托管扩展从 System::String^ 转换为 char* 的若干方法。 

方法 1

StringToHGlobalAnsi
 将托管 String 对象的内容复制到本机堆,然后动态地将它转换为美国国家标准学会 (ANSI) 格式。此方法将分配所需的本机堆内存:
//using namespace System::Runtime::InteropServices;char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);printf(str2);Marshal::FreeHGlobal( IntPtr(str2) );

方法2

VC7 
CString
 类有一个构造函数,它带有一个托管 String 指针并将其内容加载到 CString 中:
//#include 
System::String
^
str = "Hello world\n";CString str3( str ); printf(str3);
---------------------------------------   char *  转  String^    ------------------------
const char * p = "你妹的";String ^ MyStr = Marshal::PtrToStringAnsi((IntPtr)(char *)p);Console::WriteLine(MyStr);

完整代码示例

//compiler option:cl /clr  #include 
#include
#include
#using
using namespace System;using namespace System::Runtime::InteropServices;int _tmain(void){    System::String ^str = "Hello world\n";
    //method 1    char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);    printf(str2);    Marshal::FreeHGlobal( IntPtr(str2) );
    //method 2    CString str3(str);     printf(str3);
  const char * p = "你妹的";  String ^ MyStr = Marshal::PtrToStringAnsi((IntPtr)(char *)p);  Console::WriteLine(MyStr);
return 0;}
 

转载地址:https://blog.csdn.net/yangyangsnr/article/details/41642339 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:能够把自动问答机制应用到运维中吗?
下一篇:C# checklistbox控件用法总结(怎样得到多选的值,以及动态加载数据)

发表评论

最新留言

很好
[***.229.124.182]2024年04月15日 18时41分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章