كيف يمكنني تحويل "مؤشر إلى كونست تشار" إلى "Std :: String"؟
سؤال
لدي فئة تُرجع مؤشرًا مكتوبًا إلى "const tchar". أحتاج إلى تحويله إلى سلسلة std :: لكنني لم أجد طريقة لتحقيق ذلك.
هل يمكن لأي شخص تقديم بعض البصيرة حول كيفية تحويله؟
المحلول
اعتمادًا على إعدادات التجميع الخاصة بك ، TCHAR
هو إما char
أو أ WCHAR
(أو wchar_t
).
إذا كنت تستخدم إعداد سلسلة أحرف Multi Byte ، فعليك TCHAR
هو نفس شار. لذلك يمكنك فقط تعيين سلسلة على TCHAR*
عاد.
إذا كنت تستخدم إعداد سلسلة أحرف Unicode ، فعليك TCHAR
هو شار واسع ويجب تحويله باستخدام Widechartomultibyte.
إذا كنت تستخدم Visual Studio ، والتي أفترض أنك كذلك ، يمكنك تغيير هذا الإعداد في خصائص المشروع ضمن مجموعة الأحرف.
نصائح أخرى
افعل كل ما يقوله براين. بمجرد أن تحصل عليه في codepage ، يمكنك القيام بذلك:
std::string s(myTchar, myTchar+length);
أو
std::wstring s(myTchar, myTchar+length);
للحصول عليها في سلسلة.
يمكنك أيضًا استخدام وحدات ماكرو تحويل نص ATL المفيدة لهذا ، على سبيل المثال:
std::wstring str = CT2W(_T("A TCHAR string"));
CT2W = نص const على نطاق واسع.
يمكنك أيضًا تحديد صفحة رمز للتحويل ، على سبيل المثال
std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE);
كانت وحدات الماكرو هذه (في شكلها الحالي) متاحة لمشاريع Visual Studio C ++ منذ VS2005.
هذا يعتمد. إذا لم تحدد _UNICODE
أو UNICODE
ثم يمكنك عمل سلسلة تحتوي على الحرف مثل هذا:
const TCHAR example = _T('Q');
std::string mystring(1, example);
إذا كنت تستخدم _UNICODE
و UNICODE
ثم قد لا يزال هذا النهج يعمل ولكن الشخصية قد لا تكون قابلة للتحويل إلى char
. في هذه الحالة ، ستحتاج إلى تحويل الحرف إلى سلسلة. عادة ما تحتاج إلى استخدام مكالمة مثل wcstombs
أو WideCharToMultiByte
مما يمنحك تحكمًا أكمل في الترميز.
في كلتا الحالتين ستحتاج إلى تخصيص مخزن مؤقت للنتيجة وبناء std::string
من هذا المخزن المؤقت ، تذكر تخصيص المخزن المؤقت بمجرد الانتهاء (أو استخدم شيئًا مثل vector<char>
بحيث يحدث هذا تلقائيا).