How to: Convert System::String to wchar_t* or char*
はい.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:
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:
Hello
Hello