How to: Convert System::String to wchar_t* or char*

来源:互联网 发布:男士抗痘洗面奶知乎 编辑:程序博客网 时间:2024/05/16 17:37

在.net平台上使用c++/clr开发,经常会遇到这样一个问题:How to: Convert System::String to wchar_t* or char* ?

MSDN上的这篇文章会打消你的疑虑,告诉你一个转换途径。(简单的英文,恕不翻译)

You can use PtrToStringChars in Vcclr.h to convert String to native wchar_t * or char *. This always returns a wide Unicode string pointer because CLR strings are internally Unicode. You can then convert from wide as shown in the following example.

Example

// convert_string_to_wchar.cpp
// compile with: /clr
#include < stdio.h >
#include 
< stdlib.h >
#include 
< vcclr.h >

using namespace System;

int main() {
   String 
^str = "Hello";

   
// Pin memory so GC can't move it while native function is called
   pin_ptr<const wchar_t> wch = PtrToStringChars(str);
   printf_s(
"%S ", wch);

   
// Conversion to char* :
   
// Can just convert wchar_t* to char* using one of the 
   
// conversion functions such as: 
   
// WideCharToMultiByte()
   
// wcstombs_s()
   
// ... etc
   size_t convertedChars = 0;
   size_t  sizeInBytes 
= ((str->Length + 1* 2);
   errno_t err 
= 0;
   
char    *ch = (char *)malloc(sizeInBytes);

   err 
= wcstombs_s(&convertedChars, 
                    ch, sizeInBytes,
                    wch, sizeInBytes);
   
if (err != 0)
      printf_s(
"wcstombs_s  failed! ");

    printf_s(
"%s ", ch);
}

Output:

HelloHello
原创粉丝点击