What is the difference between ASCII Chr(10) and Chr(13)
Writing this because I can never remember which ascii code is \n and which is \r . Usually I end up googling my ASCII Cheatsheet for the answer. So here it is fully explained in case you are curious:
What is Chr(10)
The ASCII character code 10 is sometimes written as \n and it is sometimes called a New Line or NL . ASCII character 10 is also called a Line Feed or LF .
On a UNIX based operating system such as Linux or Mac it is all you typically use to delineate a line in a file.
What is Chr(13)
The ASCII character code 13 is called a Carriage Return or CR . On windows based computers files are typically delimited with a Carriage Return Line Feed or CRLF . So that is a Chr(13) followed by a Chr(10) that compose a proper CRLF .
Things such as HTTP headers or MIME mail headers are also delimited with a CRLF .
If you have ever opened a file with notepad on windows and found that it appears that everything is on one line, but then open it in another editor to find that the lines appear, the reason for that is that the file is delimited with only LF Chr(10) and not CRLF . Notepad is not smart enough to know the difference and plops everything on one line. Most text editors on windows besides notepad have no problem with working on files that are only delimited with \n or Chr(10) .
This all dates back to the typewriter
The term Carriage Return actually dates back to when typewriters were commonly used. When you hit enter on a typewriter it will advance the paper to the next line (line feed!), however unless you return the carriage (that lever that you move to the left) you would keep typing, here’s an example:
So what should I use as a file line delimiter?
I tend to use only Chr(10) because it takes less space. Unless you have a use case where people will be opening the files you create with notepad, this should work fine.
Also if your file needs to be interfaced with a typewriter, I would make sure you are using a Carriage Return 😉
Is it Char(10) or Chr(10)?
The name of the function to return an ascii character from an integer character code is not consistent across programming languages. So it depends what language you are using, here is a handy table with some popular languages:
Like this? Follow me ↯
What is the difference between ASCII Chr(10) and Chr(13) was first published on May 17, 2019.
Comments
When writing English on paper with a pen by hand, the paper is stationary and ones hand moves to the right across the paper. When the righthand edge of the paper is reached ones hand moves down to the left edge to write the next line.
On a manual mechanical typewriter, the paper is mounted on a roller called a carriage. Between the paper and the key hammers is an ink ribbon. When typing, the key action moves the carriage to the left after the character is impressed on the paper through the ink ribbon. To return to the writing by hand analogy, it would be like keeping the pen hand still and moving the paper underneath to the left instead.
On a manual mechanical typewriter the carriage has a carriage return lever. The first part of its travel advances the paper on the carriage roller. That is the line feed. Continued pressure on the carriage return lever causes the carriage to slide to the right until the left edge of the paper is under the character key hammers. That is a carriage return.
As printing technology developed, the print head moved left to right and paper stayed in same place just moving up a line. However the terminology remained true to a mechanical typewriter.
Что такое CHAR(13) + CHAR(10) и зачем они нужны?
Вижу в скрипте такое значение CHAR(13) + CHAR(10). Вообще скрипт для того, чтобы вставить в таблицу три значения. И вот эти CHAR(13) + CHAR(10) вставлены в скрипт не 3, а 4 раза, то есть обступают значения со всех сторон.
Можете рассказать, что это такое и зачем нужно?
Если будете употреблять слово каретка, то, пожалуйста, уточните, что это значит в sql.
char(13) — это carriage return (возврат каретки) — проще говоря символ return/ввод
char(10) — это line feed (новая строка)
Update
Каретка — это был такой в механизм в пишущей машинке, в котором располагался лист бумаги, на которой печатали, на фото это сверху бандура:

Для перевода каретки была такая клавиша называлась возврат каретки или ВК, по английски CR — carriage return (на фото ее роль играет огромный крюк слева вверху)
Исторически раньше печатали все на пишмашинке включая код для компутеров с тех пор это осталось. Сейчас ее роль выполняет клавиша ENTER/RETURN/ВВОД
LineFeed — новая строка, кстати ее роль на фото выполняет черный валик справа, машинистка вручную крутила ее, чтобы перевести новую строку (в зависимости от продвинутости машинки LF иногда надо было переводить вручную, а иногда он был совмещен с CR). Этот анахронизм сохранился до сих пор. В разных операционных системах новая строка трактуется разными наборами символов:
4.11 – Символы
На данный момент базовые типы данных, которые мы рассмотрели, использовались для хранения чисел (целые числа и числа с плавающей запятой) или значений истина/ложь (логические значения). Но что, если мы хотим хранить буквы?
Для хранения символов был разработан тип данных char . Символом может быть одна буква, цифра, знак или пробел.
Тип данных char является целочисленным типом, что означает, что базовое значение хранится как целое число. Подобно тому, как логическое значение 0 интерпретируется как false , а ненулевое значение интерпретируется как true , целое число, хранимое переменной char , интерпретируется как символ ASCII.
ASCII расшифровывается как American Standard Code for Information Interchange (Американский стандартный код для обмена информацией) и определяет конкретный способ представления английских символов (плюс несколько других символов) в виде чисел от 0 до 127 (называемых кодом ASCII или кодовым обозначением). Например, код ASCII 97 интерпретируется как символ ' а '.
Символьные литералы всегда помещаются в одинарные кавычки (например, ' g ', ' 1 ', ' ').
Ниже приведена полная таблица символов ASCII:
Коды 0–31 называются непечатаемыми символами и в основном используются для форматирования и управления принтерами. Большинство из них сейчас устарели.
Коды 32–127 называются печатными символами и представляют собой буквы, цифры и знаки препинания, которые большинство компьютеров используют для отображения основного английского текста.
Инициализация переменных char
Вы можете инициализировать переменные типа char , используя символьные литералы:
Вы также можете инициализировать переменные типа char целыми числами, но этого, если возможно, следует избегать.
Предупреждение
Будьте осторожны, чтобы не перепутать символы чисел с целыми числами. Следующие две инициализации не эквивалентны:
Символы чисел предназначены для использования, когда мы хотим представить числа в виде текста, а не в виде чисел и применения к ним математических операций.
Печать переменных типа char
При использовании std::cout для печати переменной типа char , std::cout выводит переменную char как символ ASCII:
Данная программа дает следующий результат:
Мы также можем напрямую выводить символьные литералы:
В результате это дает:
Напоминание
В C++ целочисленный тип фиксированной ширины int8_t обычно обрабатывается так же, как signed char , поэтому он обычно печатается как символ ( char ) вместо целого числа.
Печать переменных char как целых чисел через приведение типов
Если мы хотим вывести char как число вместо символа, мы должны указать std::cout , чтобы он печатал переменную char , как если бы она была целочисленного типа. Один (плохой) способ сделать это – присвоить значение переменной char другой переменной целочисленного типа и напечатать эту переменную:
Однако это довольно коряво. Лучше использовать приведение типа. Приведение типа создает значение одного типа из значения другого типа. Для преобразования между базовыми типами данных (например, из char в int или наоборот) мы используем приведение типа, называемое статическим приведением.
Синтаксис статического приведения выглядит немного забавным:
static_cast принимает значение из выражения в качестве входных данных и преобразует его в любой базовый тип, который представляет новый_тип (например, int , bool , char , double ).
Ключевые выводы
Всякий раз, когда вы видите синтаксис C++ (за исключением препроцессора), в котором используются угловые скобки, то, что между угловыми скобками, скорее всего, будет типом. Обычно C++ работает с концепциями, которым нужен параметризуемый тип.
Ниже показан пример использования статического приведения для создания целочисленного значения из нашего значения char :
Эта программа дает следующий вывод:
Важно отметить, что параметр static_cast вычисляется как выражение. Когда мы передаем переменную, эта переменная вычисляется для получения ее значения, которое затем преобразуется в новый тип. На переменную не влияет приведение ее значения к новому типу. В приведенном выше случае переменная ch по-прежнему является char и сохраняет то же значение.
Также обратите внимание, что статическое приведение не выполняет никакой проверки диапазона значений, поэтому, если вы приведете большое целое число в char , вы вызовете переполнение своей переменной char .
О статическом приведении типов и других типах приведения мы поговорим подробнее в следующем уроке (8.5 – Явное преобразование типов (приведение) и static_cast ).
Ввод символов
Следующая программа просит пользователя ввести символ, а затем печатает его как символ и его код ASCII:
Ниже показан результат одного запуска:
Обратите внимание, что std::cin позволяет вводить несколько символов. Однако переменная ch может содержать только 1 символ. Следовательно, в переменную ch извлекается только первый входной символ. Остальная часть пользовательского ввода остается во входном буфере, который использует std::cin , и может быть извлечена с помощью последующих вызовов std::cin .
Вы можете увидеть это поведение в следующем примере:
Размер, диапазон и символ по умолчанию у переменных char
char определяется C++ всегда размером 1 байт. По умолчанию char может быть со знаком или без знака (хотя обычно он со знаком). Если вы используете переменные char для хранения символов ASCII, вам не нужно указывать знак (поскольку переменные char со знаком и без знака могут содержать значения от 0 до 127).
Если вы используете char для хранения небольших целых чисел (чего не следует делать, если вы явно не оптимизируете используемую память), вы всегда должны указывать, со знаком переменная или нет. signed char (со знаком) может содержать число от -128 до 127. unsigned char (без знака) может содержать число от 0 до 255.
Экранированные последовательности
В C++ есть некоторые символы, которые имеют особое значение. Эти символы называются экранированными последовательностями (управляющими последовательностями, escape-последовательностями). Экранированная последовательность начинается с символа '\' (обратный слеш), за которым следует буква или цифра.
Вы уже видели наиболее распространенную экранированную последовательность: ' \n ', которую можно использовать для вставки символа новой строки в текстовую строку:
Эта программа выдает:
Еще одна часто используемая экранированная последовательность – ' \t ', которая включает горизонтальную табуляцию:
Три других примечательных экранированных последовательности:
- \' – печатает одинарную кавычку;
- \" – печатает двойную кавычку;
- \\ – печатает обратный слеш.
Ниже приведена таблица всех экранированных последовательностей:
| Название | Символ | Назначение |
|---|---|---|
| Предупреждение | \a | Выдает предупреждение, например звуковой сигнал |
| Backspace | \b | Перемещает курсор на одну позицию назад |
| Перевод страницы | \f | Перемещает курсор на следующую логическую страницу |
| Новая строка | \n | Перемещает курсор на следующую строку |
| Возврат каретки | \r | Перемещает курсор в начало строки |
| Горизонтальная табуляция | \t | Печать горизонтальной табуляции |
| Вертикальная табуляция | \v | Печатает вертикальную табуляцию |
| Одинарная кавычка | \' | Печать одинарной кавычки |
| Двойная кавычка | \" | Печать двойной кавычки |
| Обратная косая черта | \\ | Печатает обратный слеш |
| Вопросительный знак | \? | Печатает вопросительный знак Больше не актуально. Вы можете использовать вопросительные знаки без экранирования. |
| Восьмеричное число | \(число) | Преобразуется в символ, представленный восьмеричным числом |
| Шестнадцатеричное число | \x(число) | Преобразуется в символ, представленный шестнадцатеричным числом |
Вот несколько примеров:
Эта программа напечатает:
Новая строка ( \n ) против std::endl
В чем разница между заключением символов в одинарные и двойные кавычки?
Отдельные символы всегда заключаются в одинарные кавычки (например, 'a', '+', '5'). char может представлять только один символ (например, букву а, знак плюса, цифру 5). Что-то вроде этого некорректно:
Текст, заключенный в двойные кавычки (например, "Hello, world!"), называется строкой. Строка – это набор последовательных символов (и, таким образом, строка может содержать несколько символов).
Пока вы можете использовать строковые литералы в своем коде:
Правило
Всегда помещайте отдельные символы в одинарные кавычки (например, ' t ' или ' \n ', а не " t " или " \n "). Это помогает компилятору более эффективно выполнять оптимизацию.
А как насчет других типов символов, wchar_t , char16_t и char32_t ?
wchar_t следует избегать почти во всех случаях (за исключением взаимодействия с Windows API). Его размер определяется реализацией и не является надежным. Он не рекомендуется для использования.
В качестве отступления.
Англоязычный термин «deprecated» (не рекомендуется) означает «всё еще поддерживается, но больше не рекомендуется для использования, потому что он был заменен чем-то лучшим или больше не считается безопасным».
Подобно тому, как ASCII сопоставляет целые числа 0–127 с символами английского алфавита, существуют и другие стандарты кодировки символов для сопоставления целых чисел (разного размера) с символами других языков. Наиболее известной кодировкой за пределами диапазона ASCII является стандарт Unicode (Юникод), который сопоставляет более 110 000 целых чисел с символами на многих языках. Поскольку Unicode содержит очень много кодовых обозначений, то для одного кодового обозначения, чтобы представить один символ, Unicode требуется 32 бита (кодировка UTF-32). Однако символы Unicode также могут быть закодированы с использованием 16-ти или 8-ми битов (кодировки UTF-16 и UTF-8 соответственно).
char16_t и char32_t были добавлены в C++11 для обеспечения явной поддержки 16-битных и 32-битных символов Unicode. char8_t был добавлен в C++20.
Если вы не планируете сделать свою программу совместимой с Unicode, вам не нужно использовать char8_t , char16_t или char32_t . Юникод и локализация в основном выходят за рамки этих руководств, поэтому мы не будем рассматривать их дальше.
А пока при работе с символами (и строками) вы должны использовать только символы ASCII. Использование символов из других наборов символов может привести к неправильному отображению ваших символов.
Тип данных char
Как вы уже знаете, тип данных char используется для хранения отдельных символов. Оказывается, кроме символов, в переменную данного типа можно записать целое число. При этом размер этого типа данных всего 256 значений. В переменной данного типа можно хранить значения от 0 до 255 включительно, либо от -128 до 127 . Это зависит от вашего компилятора.
Сейчас поясню, зачем это нужно. В памяти компьютера всё хранится в виде 0 или 1 , это нам известно. Чтобы хранить числа, компьютер переводит их в двоичную систему счисления. Но как быть с буквами, знаками препинания? Для этого люди придумали специальные таблицы, которые называются кодировками .
В такой таблице каждому символу сопоставляется определённое число. И уже это число преобразуется в двоичную систему и хранится в памяти компьютера. С кодировками часто бывают проблемы. Они возникают из-за того, что одному числу в разных таблицах могут соответствовать разные символы.
Язык Си использует одну из таких таблиц – таблицу ASCII (аббр. American Standard Code for Information Interchange) .
В ней первые числа от 0 до 32 зарезервированы для служебных команд, например, 10 используется для перевода строки.А вот символ с кодом 0 обозначает конец символьной строки. Он нам скоро понадобится.
Вот посмотрите на следующий пример.
А вот результат её работы.

Рис.1 Пример вывода служебного символа на экран
Как видите, символ с кодом 10 , действительно, переводит строку (соответствует escape-последовательности \n ).
Сохрани в закладки или поддержи проект.
Практика
Решите предложенные задачи:
Для удобства работы сразу переходите в полноэкранный режим 
Исследовательские задачи для хакеров
-
Проверить как в вашей системе работает тип char. Для этого можете использовать следующую программу: