Что такое char16_t и char32_t, и где я могу их найти? - PullRequest
0 голосов
/ 09 сентября 2018

Я искал char16_t и char32_t, так как я работаю с Unicode, и все, что я мог найти в Интернете, это то, что они были внутри uchar.h. Я нашел указанный заголовок внутри iOS SDK (по какой-то причине не macOS), но в нем таких типов не было. Я видел их в другом заголовке, но не смог найти, где они определены. Кроме того, информация в интернете в лучшем случае скудна, так что я немного заблудился здесь; но я прочитал wchar_t, не должен использоваться для Unicode, что я и делал до сих пор, поэтому, пожалуйста, помогите: (

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

char16_t и char32_t указаны в стандарте C. (Ниже приведены цитаты из стандарта 2018 года.)

В соответствии с пунктом 7.28, заголовок <uchar.h> объявляет их как целочисленные типы без знака, которые будут использоваться для 16-битных и 32-битных символов соответственно. Вы не должны охотиться за ними в любом другом заголовке; #include <uchar.h> должно хватить.

Также в соответствии с пунктом 7.28 каждый из этих типов является самым узким целочисленным типом без знака с требуемым количеством битов. (Например, в реализации, которая поддерживает только целые числа без знака 8, 18, 24 и 36 и 50 бит, uchar16_t должен быть размером 18 бит; он не может быть 24, а uchar32_t будет должно быть 36.)

Согласно пункту 6.4.5, когда строковый литерал имеет префикс u или U, как в u"abc" или U"abc", это широкий строковый литерал, в котором элементы имеют тип char16_t или char32_t соответственно.

В соответствии с пунктом 6.10.8.2, если реализация C определяет макрос препроцессора __STDC_UTF_16__ как 1, это указывает, что значения char16_t кодируются в кодировке UTF-16. Точно так же, __STDC_UTF_32__ указывает, что char32_t значения имеют кодировку UTF-32. В отсутствие этих макросов не делается никаких утверждений о кодировках.

0 голосов
/ 09 сентября 2018

У Microsoft есть честное описание: https://docs.microsoft.com/en-us/cpp/cpp/char-wchar-t-char16-t-char32-t?view=vs-2017

  • char - это оригинальное, обычно 8-битное, символьное представление.

  • wcharэто "широкий символ", 16 бит, используемый Windows.Microsoft была одним из первых пользователей Unicode, но, к сожалению, это застряло в этой кодировке, используемой только в Windows.

  • char16 и char32, используемые для UTF-16 и -32

Большинство систем, отличных от Windows, используют UTF-8 для кодирования (и даже Windows 10 принимает это, https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8). UTF-8 на сегодняшний день является наиболее распространенной кодировкой, используемой сегодня в Интернете. (ref: https://en.wikipedia.org/wiki/UTF-8)

UTF-8 хранится в виде последовательности символов. UTF-8 - это, вероятно, кодировка, которую вам будет проще всего использовать, в зависимости от вашей ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...