Wide String conversions
-
On 22/11/2017 at 06:29, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R19
Platform: Windows ;
Language(s) : C++ ;---------
Hello,
I'm trying to get a wide string out of the C4D String class, but I'm getting garbage at the end of it.// const Filename &name // contains "C:\myfile.txt" String str = name.GetFileString(); maxon::BaseArray<Utf16Char> arr; if(str.GetUtf16(arr)) { const wchar_t *ptr = (const wchar_t * )arr.GetFirst(); wprintf(L"ptr: %s\n", ptr ); }
It prints: C:\myfile.txt <garbage chars at end>
What am I doing wrong? Is it bad to assume that GetUtf16 arrays are always terminated by a NULL?
I also would like to convert a wide string to String:
wchar_t wfilename[256] = L"C:\\myfile.txt"; String str; str.SetUtf16( (const Utf16Char * )wfilename, -1 );
Is this correct as well?
Using C4D C++ SDK.
-
On 23/11/2017 at 03:18, xxxxxxxx wrote:
Hi,
As stated in the docs, the buffer returned by GetUtf16() is not null terminated.
So you have to add it to the code with arr.Append(0) before conversion to wchar_t*.
The code for the other way round (from wchar_t* to String) looks fine. -
On 23/11/2017 at 12:32, xxxxxxxx wrote:
Thanks for the reply.
I didn't know about arr.Append(0). I found another way using Count(), but your method is much cleaner.