Я знаю, что строки C char [] с '\ 0' в последнем элементе. Но как кодируются символы?
Обновление: я нашел эту классную ссылку, которая рассказывает о многих других языках программирования и их условных обозначениях: Ссылка
Я знаю, что строки C char [] с '\ 0' в последнем элементе. Но как кодируются символы?
Обновление: я нашел эту классную ссылку, которая рассказывает о многих других языках программирования и их условных обозначениях: Ссылка
В стандарте говорится, что вы получаете по меньшей мере 52 символа латинского алфавита верхнего и нижнего регистра, цифры от 0 до 9, символы ! " # % & ' ( ) * + , - . / :
; < = > ? [ \ ] ^ _ { | } ~
и символ пробела, а также управляющие символы, представляющие горизонтальные вкладку, вертикальную вкладку и фид.
Единственное, что он говорит о числовом кодировании, - это то, что все вышеперечисленное соответствует одному байту и что значение каждой цифры после нуля больше, чем значение предыдущего.
Фактическая кодировка, вероятно, унаследована от ваших настроек локали. Возможно, что-то ASCII-совместимое.
В стандарте это не указывается. Обычно с ASCII.
Строка c - это всего лишь последовательность байтов. Это означает, что у него нет четко определенной кодировки, это может быть ASCII, UTF8 или что-то еще, если на то пошло. Поскольку большинство операционных систем понимают ASCII по умолчанию, а исходный код в основном написан с кодировкой ASCII, поэтому данные, которые вы найдете в простой (char *), очень часто будут ASCII. Тем не менее, нет никакой гарантии, что то, что вы выберете из (char *), будет UTF8 или даже KOI8.
Они на самом деле не "закодированы" как таковые, они просто хранятся как есть. Строка "hello" представляет собой массив со значениями char 'h'
, 'e'
, 'l'
, 'l'
, 'o'
и '\0'
в этом порядке. Стандарт C имеет базовый набор символов, который включает эти символы, но не указывает кодировку в байты. Это может быть EBCDIC, для всего, что вы знаете.
Как уже указывалось другое, C имеет некоторые ограничения, которые разрешены для кодировок символов источника и исполнения, но относительно разрешительны. Поэтому, в частности, это не обязательно ASCII, и в большинстве случаев в настоящее время, по крайней мере, расширения этого.
Ваша среда исполнения предназначена для возможного перевода между исходным и исполняемым наборами символов.
Поэтому, как правило, вы не должны заботиться о кодировании и, наоборот, пытаться кодировать независимо от него. Поэтому существуют специальные escape-последовательности для специальных символов типа '\n'
или '\t'
и универсальных кодировок символов, таких как '\u0386'
. Поэтому обычно вам не нужно искать кодировки для набора символов выполнения самостоятельно.