IntPtr和string的相互转化
来源:互联网 发布:关口知宏评价中国 编辑:程序博客网 时间:2024/06/05 20:08
Marsha有三个方法将string转为IntPtr:
Copies the contents of a managed String into unmanaged memory, converting into ANSI format if required.
public static IntPtr StringToHGlobalAuto(string s)
public static IntPtr StringToHGlobalAnsi(string s)
和
public static IntPtr StringToHGlobalUni(string s)
以上函数的本质其实都是:
计算出string s的长度(字节)n
然后用malloc()请求分配n个字节的内存(假设内存地址为address),接着将string s中的字符复制到malloc返回的内存中
最后将adress封装到IntPtr返回
C#中的IntPtr与C/C++中的内存指(void *)针对应,
string与const char *对应,
ref string与const char **对应
如果要用char *,使用IntPtr
如果要使用char **,使用ref IntPtr
使用例子(C++):
using namespace System;
using namespace System::Runtime::InteropServices;
int main()
{
// Create a managed string.
String^ managedString = "Hello unmanaged world (from the managed world).";
// Marshal the managed string to unmanaged memory.
char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString).ToPointer();
// Always free the unmanaged string.
Marshal::FreeHGlobal((IntPtr)stringPointer);
return 0;
}
Marshal中有好几个个方法将IntPtr转换为字符串:
PtrToStringUni(IntPtr)
PtrToStringAnsi(IntPtr)
等
- IntPtr和string的相互转化
- string和xml的相互转化
- string和NSString*的相互转化
- String和Date的相互转化
- string 和 int 之间的相互转化
- string和double的相互转化
- String和byte[]相互转化
- java中String和int之间的相互转化
- MFC中CString和string以及char * 的相互转化
- C++ 中 string 和其它类型的相互转化。
- node.js JSON对象和string的相互转化
- C串和string串的相互转化
- C++ 中 string 和其它类型的相互转化。
- Java中byte[]、char[]和String的相互转化
- C风格字符串和C++string对象的相互转化
- java中String类型和char[]类型的相互转化
- Java文件流和String的相互转化
- C风格字符串和C++string对象的相互转化
- 图像平滑-邻域平均法
- 如何理解软件开发规范性与灵活性
- 使用Oracle SQLDeveloper连接数据库并创建用户
- 在IE中使用first-child和last-child [半原][旧]
- 11gR2中awr 相关脚本的说明
- IntPtr和string的相互转化
- Android入门/GirdView(九)
- Android中的Broadcast Action大全
- iphone定位城市
- 安全增强 Linux (SELinux) 剖析
- Android开发之文件浏览器
- Python基础教程——8 异常
- 【DP(背包)】 hdu2955 Robberies
- 软件项目外包之路何以如此坎坷?