В C (со ссылкой на the N1570 draft, раздел 7.1.1):
широкая строка представляет собой непрерывную последовательность широких символов прекращается , включая первый нулевой широкий символ.
, где «широкий характер» значение типа wchar_t
, который определен в <stddef.h>
как целого типа.
Я не могу найти определение «широкая строка» в the N3337 draft стандарта C++, но он должен быть аналогичным. Одно незначительное отличие состоит в том, что wchar_t
является typedef в C и встроенным типом (чье имя является ключевым словом) в C++. Но поскольку C++ разделяет большую часть библиотеки C, включая функции, которые действуют на широкие строки, можно с уверенностью предположить, что определения C и C++ совместимы. (Если кто-то может найти что-то более конкретное в стандарте C++, прокомментируйте или отредактируйте этот абзац.)
В C и C++ размер wchar_t
определяется реализацией. Обычно это 2 или 4 байта (16 или 32 бита, если вы не находитесь в очень экзотической системе с байтами размером более 8 бит). Широкая строка представляет собой последовательность широких символов (wchar_t
значений), заканчивающихся нулевым широким символом. Конечный широкий символ будет иметь тот же размер, что и любой другой широкий символ, обычно 2 или 4 байта.
В частности, учитывая, что wchar_t
больше, чем char
, одиночного нулевых байты не завершают широкую строку.
Стоит также отметить, что порядок байтов определяется реализацией.Широкий символ со значением 0x1234
, если смотреть в виде последовательности 8-битовых байтов, может появиться, как любой из:
0x12
, 0x34
0x34
, 0x12
0x00
, 0x00
, 0x12
, 0x34
0x34
, 0x12
, 0x00
, 0x00
И это не единственные возможности.
Язык? (Или это не имеет значения?) – John
Извините, я не понимаю это хорошо. Почему язык - это вопрос? Но если да, я говорю об английском и китайском – Kosmos
Нет :) какой язык программирования? C++? – John