سؤال

STD :: WSTRING.C_STR () إرجاع Wchar_T *.

كيف يمكنني الحصول على من wchar_t * to thar *، أو من STD :: WSTRING إلى TAR *

شكرا

هل كانت مفيدة؟

المحلول

#include <atlconv.h>

TCHAR *dst = W2T(src.c_str());

سوف تفعل الشيء الصحيح في أنسي أو يونيكود يبني.

نصائح أخرى

استخدم هذا :

wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();

يعرف tchar * أن يكون wchar_t * إذا تم تعريف Unicode، وإلا فإنه سار *. لذلك قد تبدو الكود الخاص بك شيء مثل هذا:

wchar_t* src;
TCHAR* result;
#ifdef UNICODE
result = src;
#else
//I think W2A is defined in atlbase.h, and it returns a stack-allocated var.
//If that's not OK, look at the documenation for wcstombs.
result = W2A(src);
#endif

في جنرال لواء هذا غير ممكن لأن wchar_t قد لا يكون بنفس الحجم مثل tchar.

تم بالفعل إدراج العديد من الحلول للتحويل بين مجموعات الأحرف. يمكن أن تعمل هذه إذا كانت تحدد الأحرف تتداخل للنطاق الذي يتم تحويله.

أفضل تجنب المشكلة بالكامل حيثما أمكن ذلك واستخدام سلسلة قياسية محددة على مجموعة TARCHARD كما يلي:

typedef std::basic_string<TCHAR> tstring;

باستخدام هذا لديك الآن سلسلة متوافقة مع مكتبة قياسية متوافقة أيضا مع Windows Tchar Macro.

يمكنك استخدام:

wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after

على افتراض أنك تعمل على Windows.

إذا كنت في تكوين بناء Unicode، إذن TCHAR و wchar_t هي نفس الشيء. قد تحتاج إلى مصبوغ اعتمادا على ما إذا كان لديك / Z مجموعة wchar_t هو نوع مقابل wchar_t هو typedef.

إذا كنت في تكوين بناء متعددة البياضات، فأنت بحاجة MultiByteToWideChar (و vica بالعكس).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top