当我在C ++中使用GUI时,我认为文本字段存储为托管字符串。我需要一种方法将它们转换为标准的int,浮点数和字符串。有什么帮助吗?
答案 0 :(得分:3)
您可以使用Marshal.StringToHGlobalAnsi将System.String转换为非托管char *。通过致电Marshal.FreeHGlobal,确保在完成后将其释放。要将字符串转换为数值,可以使用常规的.NET解析函数,例如Int32.Parse
。
答案 1 :(得分:0)
要在本机代码中使用托管内存,必须先将托管内存的内容复制到本机内存中。
例如:
从托管内存复制内容如下:
const int len = 50;
BYTE *destination = new BYTE[nLength];
System::Byte source[] = new System::Byte[len];
System::Runtime::InteropServices::Marshal::
Copy(source, 0, IntPtr((void *)destination, len);
因为我们正在处理托管内存,所以垃圾收集可以移动并将托管数据移动到另一个位置,如果我们尝试找到要转换的数据,所有内容都将丢失。
因此我们希望通过使用__pin将托管转换为非托管来“将其固定在内存中”:
const int len = 50;
BYTE *source = new BYTE[len];
System::Byte destination[] = new System::Byte[len];
BYTE __pin *managedData = &(destination[0]);
::memcpy(source, managedData, len);
答案 2 :(得分:0)
您可以通过
简单地将System :: String ^对象转换为MFC CStringCString* name = new CString(managedName);
其中managedName是托管字符串。