2012-09-24 3 views
2

Моя переменная находится в определенной внутренней реализации большой строки, но я могу легко получить ее как широкий массив символов. Проблема в том, что мне нужно передать его библиотечной функции, которая будет принимать только массивы символов.Самый простой способ преобразовать широкий массив или массив символов в простой массив символов?

Так что я в конечном итоге с тем, что выглядит следующим образом:

wchar_t* wstr; 

// char* str = "need some processing here"; 

function(str); 

Итак, есть простой способ, или я должен просто делать это вручную посимвольно?

+0

'wcstombs' должен работать. – chris

+2

Это зависит от того, что вы пытаетесь сделать с результатом, и тем, что содержит оригинал. Если вы просто хотите обрабатывать символы ASCII, вам нужно будет: 'std :: ctype :: narrow()'. Если функция ожидает кодирования с байтабайтом, то требуется что-то вроде 'wcstombs()'. Обратите внимание, что последние обычно не считаются символами, а представляют собой последовательность байтов. –

+0

Кажется, это работает для меня, хотя я нашел лучшее решение для своей проблемы, которое не требует этого преобразования. Но все равно спасибо. –

ответ

2

char * может означать много чего. Если функция, принимающая char *, фактически принимает UTF8, существуют способы преобразования UTF16 или UTF32 в UTF8. wchar_t обычно используется для хранения UTF16 (windows) или UTF32 (macosx), среди других enencodings.

Посмотрите здесь ConvertUTF.c/.h

unicode.org code

+0

Как я могу узнать, требуется ли UTF-8 или нет? –

+1

Проще говоря, UTF8 является одним из многих способов кодирования массива символов для представления большинства символов/букв/символов/и т. Д. Большинства языков. Это, наверное, самый популярный. Если вы вызываете функцию, определенную некоторой библиотекой, проверьте документацию, чтобы увидеть, какой тип char * он ожидает. Многие популярные API-интерфейсы ожидают, что char * будет UTF8. Если вы знаете, что ваш вход wchar_t будет только когда-либо иметь английские символы (ascii-коды от 32 до 127), тогда вы можете преобразовать wchar_t в char *, используя вышеупомянутую библиотеку, потому что эти символы действительны во всех схемах кодирования char *. – cppguy

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