Функции для преобразования многобайтовых и двухбайтовых символов

Содержание

Стандартная библиотека поддерживает различные функции, предназначенные для преобразования многобайтовых и двухбайтовых символов. Эти функции (перечисленные в табл. 19.6) используют заголовок <wchar.h>. Многие из них представляют собой версии обычных многобайтовых функций, которые могут быть прерваны (и повторно запущены — restartable). Повторно запускаемая версия используя информацию о состоянии, передаваемую ей в параметре типа mbstate_t. Если этот параметр нулевой, функция предоставит собственный объект типа mbstate_t.




Таблица 19.6. Функции для преобразования многобайтовых и двухбайтовых символов
ФункцияОписание
win_t btowc(int ch)

Преобразует параметр ch в его двухбайтовый эквивалент и возвращает результат. Значение WEOF возвращается при ошибке или если ch не однобайтовый, а многобайтовый символ
size_t mbrlen(
  const char *str,
  size_t num,
  mbstate_t *state)

Повторно запускаемая версия функции mblen(), в которой информация о состоянии передается через параметр state. Возвращает положительное число, равное длине следующее многобайтового символа. Нуль возвращается в случае, если следующий символ — нулевой. При ошибке возвращается отрицательное значение. В версии С99 к параметрам str и state применен квалификатор restrict
size_t mbrtowc(
  wchar_t *out,
  const char *in,
  size_t num,
  mbstate_t *state)

Повторно запускаемая версия функции mbtowc(), в которой информация о состоянии передается через параметр state. Возвращает положительное число, равное длине следующего многобайтового символа. Нуль возвращается в случае, если следующий символ — нулевой. При ошибке возвращается значение -1 и переменной errno присваивается макрос EILSEQ. Если преобразование не завершено, возвращается число -2. В версии С99 к параметрам out, in и state применен квалификатор restrict
int mbsinit(
  const mbstate_t *state)

Возвращает значение true, если параметр state представляет начальное состояние процесса преобразования
size_t mbsrtowcs(
  wchar_t *out,
  const char **in,
  size_t num,
  mbstate_t *state)

Повторно запускаемая версия функции mbstowcs(), в которой информация о состоянии передается через параметр state. Кроме того, функция mbsrtowcs() отличается от функции mbstowcs() тем, что параметр in является косвенным указателем на исходный массив. При ошибке переменной errno присваивается макрос EILSEQ. В версии С99 к параметрам out, in и state применен квалификатор restrict
size_t wcrtomb(
  char *out,
  wchar_t ch,
  mbstate_t *state)

Повторно запускаемая версия функции wctomb(), в которой информация о состоянии передается через параметр state. При ошибке переменной errno присваивается макрос EILSEQ. В версии С99 к параметрам out и state применен квалификатор restrict
size_t wcsrtombs(
  char *out,
  const wchar_t **in,
  size_t num,
  mbstate_t *state)

Повторно запускаемая версия функции wcstombs(), в которой информация о состоянии передается через параметр state. Кроме того, функция wcsrtombs() отличается от функции wcstombs() тем, что параметр in является косвенный указателем на исходный массив. При ошибке переменной errno присваивается макрос EILSEQ. В версии С99 к параметрам out, in и state применен квалификатор restrict
int wctob(wint_t ch)

Преобразует параметр ch в его однобайтовый эквивалент. При сбое функция возвращает значение EOF