2012-06-03 3 views
0

Я преобразовываю (скорее) старый код C в VS2010. Все работает нормально, когда я компилирую программу с многобайтовой опцией, но мне нужно ее преобразовать в UNICODE.Как преобразовать char/* в wchar_t/* --- но

Я получаю много сообщений об ошибках, связанных с цепочкой (но это не странно). Моя проблема связана с тем, что мне приходится работать со строками wchar (из-за UNICODE), но мне также необходимо сохранить стандартные значения символов (программе необходимо записать данные в файл со стандартным кодом ascii).

Чтобы быть более понятным, UNICODE необходим для работы с Windows, но файлы должны быть сохранены в формате ascii. Я получаю ошибки во многих местах, и поэтому я решил поставить этот вопрос здесь.

Может ли somoene предложить наилучшую практику для такого рода проблем?

Спасибо заранее!

редактировать:

хорошо, я не эксперт по C/C++, это мой первый крупный проект. Я попробовал ваше предложение из первого ответа, как это:}

{ 
TCHAR* strz1=_T("%u blocks converted."); 
     if (n>0) 
     { 
     sprintf(str,strz1,n) 
     } 
     else 
     TCHAR* strz2=_T("No blocks found!"); 
     sprintf(str,strz2); 
     TCHAR* strz3=_T("Status"); 
     MessageBoxW(hwnd,str,strz3,MB_OK|MB_ICONINFORMATION); 
     return(fe); 
    } 

Im получать известные ошибки:

ошибка C2664: «Sprintf»: не удается преобразовать параметр 2 из «TCHAR *» до «сопзЬ полукокса *

ошибка C2664: 'MessageBoxW': не удается преобразовать параметр 2 из 'гольца [32]' до '

+0

Лучшая практика для вашего сценария («У меня есть ошибки. Я не скажу вам, что они есть»), чтобы исправить эту проблему. Я не скажу вам, как это сделать. –

+0

Используйте 'UNICODE', но вызывайте функции, которые вам нужно использовать ASCII, как' MessageBoxA', а не 'MessageBoxW' или' MessageBox'. Используйте [WideCharToMultiByte] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130 (v = vs.85) .aspx) для преобразования строки. Я не уверен, что все без примера. – chris

+0

Итак, ваш вопрос заключается в том, как конвертировать между ASCII и Unicode? Вы пытались погулять? – tenfour

ответ

2

Если вы используете MFC, а затем проверить эти макросы преобразования LPCWSTR' для CString: ATL and MFC String Conversion Macros.

Таким образом вы можете экспортировать файлы с UTF-8 и прочитать их с UTF-8 обратно в UTF-16, что является естественным способом хранения wchar_s. Таким образом, ваше приложение может использовать UNICODE и все еще экспортировать в ASCII (UTF-8 обратно совместим с ASCII).

+0

Нет, это «чистый» Win32 – GoshR

Смежные вопросы