博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
System::String转换为std::string
阅读量:4223 次
发布时间:2019-05-26

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

此文为转载文章

作者:

连接:http://blog.sina.com.cn/s/blog_695abcf70100m6ac.html

    当使用C++/CLI包装C++本地代码时,常常需要将System::String转换为std::string或者char*以调用native C++函数。.net环境中的字符串是unicode的,占2个字节,而很多native C++函数都没有考虑unicode,这种转换不仅仅是2字节转1字节,同时也涉及到字符集的转换。

    在有些文档中提到用wcstombs进行宽字符到多字符的转换,但是经过试验,这种方式在C++/CLI代码中处理中文时会失败。在System::Runtime::InteropServices名字空间里的Marshal类提供了另外一种方式(StringToHGlobalAnsi)进行这种转换,msdn中说道:“将托管 String 中的内容复制到非托管内存,并在复制时转换为 ANSI 格式。StringToHGlobalAnsi 对于自定义封送处理或者在混合托管和非托管代码时很有用。由于该方法分配字符串所需的非托管内存,因此应始终通过调用 FreeHGlobal 释放内存。StringToHGlobalAnsi 提供与 Marshal.PtrToStringAnsi 相反的功能。”

void ConvertToString(System::String^ str, std::string& text)

{
     char* p = (char*)(int)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str);
     text = p;
     System::Runtime::InteropServices::Marshal::FreeHGlobal((System::IntPtr)p);
}

你可能感兴趣的文章
一种应用于GPS反欺骗的基于MLE的RAIM改进方法
查看>>
自动驾驶汽车CAN总线数字孪生建模(二)
查看>>
自动驾驶汽车GPS系统数字孪生建模(一)
查看>>
自动驾驶汽车GPS系统数字孪生建模(二)
查看>>
上海控安入选首批工控安全防护能力贯标咨询机构名单
查看>>
自动驾驶汽车传感器数字孪生建模(一)
查看>>
CUDA 学习(四)、线程
查看>>
CUDA 学习(五)、线程块
查看>>
CUDA 学习(八)、线程块调度
查看>>
CUDA 学习(九)、CUDA 内存
查看>>
CUDA 学习(十一)、共享内存
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十四章 生化尖兵
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十五章 超级马里奥64
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十七章 游戏感的原理
查看>>
游戏感:虚拟感觉的游戏设计师指南——第十八章 我想做的游戏
查看>>
游戏设计的艺术:一本透镜的书——第十章 某些元素是游戏机制
查看>>
游戏设计的艺术:一本透镜的书——第十一章 游戏机制必须平衡
查看>>
游戏设计的艺术:一本透镜的书——第十二章 游戏机制支撑谜题
查看>>
游戏设计的艺术:一本透镜的书——第十三章 玩家通过界面玩游戏
查看>>
编写苹果游戏中心应用程序(翻译 1.3 为iOS应用程序设置游戏中心)
查看>>