كيفية استخدام TRACE مع أسكي تحت يونيكود البيئة MFC؟
سؤال
وأنا تطوير برنامج MFC في ظل ويندوز CE. ومن يونيكود بشكل افتراضي. يمكنني استخدام TRACE لطباعة بعض الرسائل مثل هذا
TRACE(TEXT("Hey! we got a problem!\n"));
وأنه يعمل بشكل جيد إذا كان كل شيء يونيكود. ولكن مع ذلك، حصلت على بعض سلسلة أسكي للطباعة. على سبيل المثال:
// open the serial port
m_Context = CreateFile(TEXT("COM1:"), ...);
int rc = ReadFile(m_Context, buffer, 1, cBytes, NULL);
// Oops!! We got a problem, because we can't print a non-unicode string
TRACE(TEXT("Read data: %s\n"), buffer);
وقرأت السلسلة من خلال COM1 من وحدة GPS. أن ترسل نص من هذا القبيل "$ GPSGGA، 1،2،3،4". يتم ترميز أنهم جميعا مع ASCII. أريد أن طباعتها مع TRACE، كيف يمكنني أن أفعل؟
وشكرا.
المحلول
استخدم "%hs"
لتهيئة وسيطة سلسلة الضيقة، شريطة أن لا تبالي صفحة الرموز. انظر، على سبيل المثال، هذه الصفحة ل وصف محددات الشكل.
نصائح أخرى
في ويندوز و"٪ S" شكل محدد (رأس المال 'S') وتنسيق سلسلة هذا هو "العكس" من الإنشاء. في بناء UNICODE انها سوف نتوقع ANSI / MBCS سلسلة وغير UNICODE-يبني انها سوف نتوقع حجة UNICODE.
وأنا لست 100٪ متأكد من أن هذا سيعمل على CE، ولكن الأعمال التالية على سطح المكتب (لبناء UNICODE):
TRACE( TEXT("Unicode string: \"%s\", ASCII string: \"%S\""), L"unicode", "ascii");
ويجب أن تعمل طالما أن النص استردادها هو حقا ASCII في نطاق 0-127، وترميز Unicode هو UTF-8. وقد اعتمدت يونيكود نطاق ASCII أقل، وذلك باستخدام نفس النقاط التعليمات البرمجية.