2014-10-26 2 views
0

Итак, у меня есть string переменная, которую я хочу преобразовать в wstring.string to wstring - предотвратить преобразование из остановки на 0

Я использую mbstowcs_s.

К сожалению, моя string переменная содержит \0 как символ (не помечает конец строки) и документально:

Функция mbstowcs_s преобразует строку многобайтовых символов указывает на по mbstr в широких символов, хранящихся в буфере, на который указывает wcstr. Преобразование будет продолжаться для каждого персонажа, пока один из этих условий: многобайтовую нулевой символ встречается

Мое временное решение заключается в преобразовании полукокса на символ. что решает проблему, но, к сожалению, резко ухудшает производительность.

Любая идея, как преодолеть это? Должен ли я использовать другую функцию для преобразования?

+1

[Возможно, полезно] (http://stackoverflow.com/a/25485477/596781) –

+0

Пожалуйста, не публикуйте [дубликаты ваших собственных вопросов] (http://stackoverflow.com/questions/26571564/mbstowcs-s -stops-conversion-if-multibyte-null-character-is-detected) – arx

ответ

1

Вы можете использовать MultiByteToWideChar, который позволяет указать количество символов для преобразования.

int MultiByteToWideChar(
    _In_  UINT CodePage, 
    _In_  DWORD dwFlags, 
    _In_  LPCSTR lpMultiByteStr, 
    _In_  int cbMultiByte, 
    _Out_opt_ LPWSTR lpWideCharStr, 
    _In_  int cchWideChar 
); 

См. MultiByteToWideChar Функция.

Однако MultiByteToWideChar - это Win32 API, но это не должно быть проблемой в вашем случае.

IIRC mbstowcs также звонки MultiByteToWideChar.

+0

, если 'mbstowcs' также вызывает' MultiByteToWideChar', они намеренно называют 'MultiByteToWideChar' таким образом, что они останавливаются на' \ 0'? – idanshmu

+1

Если вы вызываете 'MultiByteToWideChar' с cbMultiByte = -1, он также остановится на' \ 0', и это то, что может сделать mbstowcs. – MrTux