строка в wstring - предотвращает остановку преобразования на \ 0

0

Поэтому у меня есть string переменная, которую я хочу преобразовать в wstring.

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

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

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

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

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

Теги:
string
type-conversion
wstring

1 ответ

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 ?
  • 1
    Если вы вызовете MultiByteToWideChar с cbMultiByte = -1, он также остановится на \0 и это может сделать mbstowcs .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню