كيف يمكنني تحويل "مؤشر إلى كونست تشار" إلى "Std :: String"؟

StackOverflow https://stackoverflow.com/questions/2141848

  •  22-09-2019
  •  | 
  •  

سؤال

لدي فئة تُرجع مؤشرًا مكتوبًا إلى "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> بحيث يحدث هذا تلقائيا).

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