Я знаю, что строки 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'. Поэтому обычно вам не нужно искать кодировки для набора символов выполнения самостоятельно.