Страницы

Поиск по вопросам

вторник, 16 октября 2018 г.

С: чем отличаются однобайтовые строки от многобайтовых строк

Встретил такое понятие как byte string, и multibyte string.
Чем они отличаются, и как эти два типа определяются? Как я понял через char тип оба, но в чем отличие тогда не понятно.


Ответ

Действительно, есть как однобайтовые, так и многобайтовые строки. И оба этих типа являются массивами элементов типа char. Но есть и разница.
В однобайтовой строке (byte string) каждый char - это один символ.
В многобайтовой строке (multibyte string) один символ может занимать более одного байта, т.е. быть расположенным в нескольких подряд идущих char
Например, строку в кодировке UTF-8 нужно сохранять как многобайтовую, поскольку один символ может занимать от 1 до 6 байт.

Небольшая историческая справка.
Вначале существовали только кодировки, где каждый символ кодировался не более чем одним байтом. Но поскольку нужно было отображать символы на разных языках, а 256 символов оказалось для этого мало, то возникли кодировки, где символ кодировался более чем одним байтом. Например, это Юникод (Unicode). Но Юникод тоже бывает разным. Можно всегда выделять для символа много места (массив wchar_t, например), а можно экономить память и сделать число байт на символ переменным, что реализует, например, UTF-8. Именно для таких кодировок с переменным числом байт на символ и были созданы многобайтовые строки.
P.S. Но никто не мешает использовать их и для кодировок с постоянным числом байт на символ.

Комментариев нет:

Отправить комментарий