перевести текст в код ascii
ASCII Code
ASCII Converter
ASCII Encoder
Answers to Questions (FAQ)
What is the ASCII standard?
The ASCII character coding standard describes a correspondence table for coding characters (letters, numbers, symbols) on a computer. This standard was defined in 1975 and contains 128 7-bit codes including 95 printable characters.
Today this standard is old and has been superseded by Unicode, which is backward compatible with ASCII.
How to encrypt using ASCII table cipher
Encryption consists of replacing each character with its value in the ASCII table (see below).
Example: Convert dCode string in ASCII, that is writing 1100100 1000011 1101111 1100100 1100101 in binary (7-bit) or 100 67 111 100 101 in decimal.
Characters which don’t exist in the encoding table cannot be coded (no special characters, accents, etc.)
How to decrypt ASCII table cipher
ASCII conversion consists of replacing each value (binary, octal, decimal or hexadecimal) with the corresponding character in the ASCII table. Its representation can be formatted into binary (0-1), octal (0-7), decimal (0-9) or hexadecimal (0-9a-f).
Example:
ASCII Values (Format) | Texte clair |
---|---|
65 77 69 82 73 67 65 78 (Decimal) | AMERICAN |
83 116 97 110 100 97 114 100 (Decimal) | Standard |
1000011 1001111 1000100 1000101 (Binary 7bit) | CODE |
49 4E 46 4F 52 4D 41 54 49 4F 4E (Hexadecimal) | INFORMATION |
111 116 124 105 122 103 110 101 116 107 105 (Octal) | INTERCHANGE |
How to recognize an ASCII ciphertext?
The message is generally written either in binary, or in decimal, or in hexadecimal (or rarely in octal).
The most frequent values must correspond to letters characters lowercase or uppercase (between 65 and 122 in decimal)
Any reference to skiing (ASCII = a ski) is a clue.
On how many characters is represented an ASCII code?
The ASCII code is almost always represented on 1 byte (8bits) even if it occupies only 7bits.
In binary, use either 7 bits or 8 bits (by adding a leading zero) to represent an ASCII character.
In octal, it is represented with 3 characters (from 000 to 177).
In decimal, the number is between 1 and 128 (from 1 to 3 characters).
In hexadecimal, 2 characters are used (from 00 to 7f).
How do I change from a lowercase ASCII letter to an uppercase letter?
In the ASCII code there is a difference of 32 between an uppercase letter and a lowercase letter. So add 32 to the ASCII code of a capital letter to get a lowercase and subtract 32 from the ASCII code of a lowercase letter to have a capital letter. The corresponding binary operation consists in setting the 5th bit (starting from the right) to 0 (upper case) or 1 (lower case).
Example: A=0100001 (65) and a=0110001 (65+32=97)
This trick does not work for accented letters, which are not in the basic ASCII table
What is the full ASCII table?
Full 7-bit ASCII table
Decimal | Octal | Hex | Binary | Character | Info |
---|---|---|---|---|---|
000 | 000 | 00 | 0000000 | NUL | (Null char.) |
001 | 001 | 01 | 0000001 | SOH | (Start of Header) |
002 | 002 | 02 | 0000010 | STX | (Start of Text) |
003 | 003 | 03 | 0000011 | ETX | (End of Text) |
004 | 004 | 04 | 0000100 | EOT | (End of Transmission) |
005 | 005 | 05 | 0000101 | ENQ | (Enquiry) |
006 | 006 | 06 | 0000110 | ACK | (Acknowledgment) |
007 | 007 | 07 | 0000111 | BEL | (Bell) |
008 | 010 | 08 | 0001000 | BS | (Backspace) |
009 | 011 | 09 | 0001001 | HT | (Horizontal Tab) |
010 | 012 | 0A | 0001010 | LF | (Line Feed) |
011 | 013 | 0B | 0001011 | VT | (Vertical Tab) |
012 | 014 | 0C | 0001100 | FF | (Form Feed) |
013 | 015 | 0D | 0001101 | CR | (Carriage Return) |
014 | 016 | 0E | 0001110 | SO | (Shift Out) |
015 | 017 | 0F | 0001111 | SI | (Shift In) |
016 | 020 | 10 | 0010000 | DLE | (Data Link Escape) |
017 | 021 | 11 | 0010001 | DC1 | (XON)(Device Control 1) |
018 | 022 | 12 | 0010010 | DC2 | (Device Control 2) |
019 | 023 | 13 | 0010011 | DC3 | (XOFF)(Device Control 3) |
020 | 024 | 14 | 0010100 | DC4 | (Device Control 4) |
021 | 025 | 15 | 0010101 | NAK | (Negative Acknowledgement) |
022 | 026 | 16 | 0010110 | SYN | (Synchronous Idle) |
023 | 027 | 17 | 0010111 | ETB | (End of Trans. Block) |
024 | 030 | 18 | 0011000 | CAN | (Cancel) |
025 | 031 | 19 | 0011001 | EM | (End of Medium) |
026 | 032 | 1A | 0011010 | SUB | (Substitute) |
027 | 033 | 1B | 0011011 | ESC | (Escape) |
028 | 034 | 1C | 0011100 | FS | (File Separator) |
029 | 035 | 1D | 0011101 | GS | (Group Separator) |
030 | 036 | 1E | 0011110 | RS | (Request to Send)(Record Separator) |
031 | 037 | 1F | 0011111 | US | (Unit Separator) |
032 | 040 | 20 | 0100000 | SP | (Space) |
033 | 041 | 21 | 0100001 | ! | |
034 | 042 | 22 | 0100010 | « | |
035 | 043 | 23 | 0100011 | # | |
036 | 044 | 24 | 0100100 | $ | |
037 | 045 | 25 | 0100101 | % | |
038 | 046 | 26 | 0100110 | & | |
039 | 047 | 27 | 0100111 | ‘ | |
040 | 050 | 28 | 0101000 | ( | |
041 | 051 | 29 | 0101001 | ) | |
042 | 052 | 2A | 0101010 | * | |
043 | 053 | 2B | 0101011 | + | |
044 | 054 | 2C | 0101100 | , | |
045 | 055 | 2D | 0101101 | — | |
046 | 056 | 2E | 0101110 | . | |
047 | 057 | 2F | 0101111 | / | |
048 | 060 | 30 | 0110000 | 0 | |
049 | 061 | 31 | 0110001 | 1 | |
050 | 062 | 32 | 0110010 | 2 | |
051 | 063 | 33 | 0110011 | 3 | |
052 | 064 | 34 | 0110100 | 4 | |
053 | 065 | 35 | 0110101 | 5 | |
054 | 066 | 36 | 0110110 | 6 | |
055 | 067 | 37 | 0110111 | 7 | |
056 | 070 | 38 | 0111000 | 8 | |
057 | 071 | 39 | 0111001 | 9 | |
058 | 072 | 3A | 0111010 | : | |
059 | 073 | 3B | 0111011 | ; | |
060 | 074 | 3C | 0111100 | ||
063 | 077 | 3F | 0111111 | ? | |
064 | 100 | 40 | 1000000 | @ | |
065 | 101 | 41 | 1000001 | A | |
066 | 102 | 42 | 1000010 | B | |
067 | 103 | 43 | 1000011 | C | |
068 | 104 | 44 | 1000100 | D | |
069 | 105 | 45 | 1000101 | E | |
070 | 106 | 46 | 1000110 | F | |
071 | 107 | 47 | 1000111 | G | |
072 | 110 | 48 | 1001000 | H | |
073 | 111 | 49 | 1001001 | I | |
074 | 112 | 4A | 1001010 | J | |
075 | 113 | 4B | 1001011 | K | |
076 | 114 | 4C | 1001100 | L | |
077 | 115 | 4D | 1001101 | M | |
078 | 116 | 4E | 1001110 | N | |
079 | 117 | 4F | 1001111 | O | |
080 | 120 | 50 | 1010000 | P | |
081 | 121 | 51 | 1010001 | Q | |
082 | 122 | 52 | 1010010 | R | |
083 | 123 | 53 | 1010011 | S | |
084 | 124 | 54 | 1010100 | T | |
085 | 125 | 55 | 1010101 | U | |
086 | 126 | 56 | 1010110 | V | |
087 | 127 | 57 | 1010111 | W | |
088 | 130 | 58 | 1011000 | X | |
089 | 131 | 59 | 1011001 | Y | |
090 | 132 | 5A | 1011010 | Z | |
091 | 133 | 5B | 1011011 | [ | |
092 | 134 | 5C | 1011100 | \ | |
093 | 135 | 5D | 1011101 | ] | |
094 | 136 | 5E | 1011110 | ^ | |
095 | 137 | 5F | 1011111 | _ | |
096 | 140 | 60 | 1100000 | ` | |
097 | 141 | 61 | 1100001 | a | |
098 | 142 | 62 | 1100010 | b | |
099 | 143 | 63 | 1100011 | c | |
100 | 144 | 64 | 1100100 | d | |
101 | 145 | 65 | 1100101 | e | |
102 | 146 | 66 | 1100110 | f | |
103 | 147 | 67 | 1100111 | g | |
104 | 150 | 68 | 1101000 | h | |
105 | 151 | 69 | 1101001 | i | |
106 | 152 | 6A | 1101010 | j | |
107 | 153 | 6B | 1101011 | k | |
108 | 154 | 6C | 1101100 | l | |
109 | 155 | 6D | 1101101 | m | |
110 | 156 | 6E | 1101110 | n | |
111 | 157 | 6F | 1101111 | o | |
112 | 160 | 70 | 1110000 | p | |
113 | 161 | 71 | 1110001 | q | |
114 | 162 | 72 | 1110010 | r | |
115 | 163 | 73 | 1110011 | s | |
116 | 164 | 74 | 1110100 | t | |
117 | 165 | 75 | 1110101 | u | |
118 | 166 | 76 | 1110110 | v | |
119 | 167 | 77 | 1110111 | w | |
120 | 170 | 78 | 1111000 | x | |
121 | 171 | 79 | 1111001 | y | |
122 | 172 | 7A | 1111010 | z | |
123 | 173 | 7B | 1111011 | < | |
124 | 174 | 7C | 1111100 | | | |
125 | 175 | 7D | 1111101 | > | |
126 | 176 | 7E | 1111110 | ||
127 | 177 | 7F | 1111111 | DEL | (Delete) |
How to code non-ASCII characters such as accents?
Use another coding table, such as Unicode or in Europe the norm ISO/CEI 8859-1 Latin which includes the ASCII table in its first part (from 0 to 127) then specific characters for the following numbers (128-255).
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ | ||||||||||||||||
1_ | ||||||||||||||||
2_ | ␣ | ! | « | # | $ | % | & | ‘ | ( | ) | * | + | , | — | . | / |
3_ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | ? | |||
4_ | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5_ | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
6_ | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7_ | p | q | r | s | t | u | v | w | x | y | z | < | | | > | ||
8_ | ||||||||||||||||
9_ | ||||||||||||||||
A_ | ⌴ | ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | ª | « | ¬ | — | ® | ¯ |
B_ | ° | ± | ² | ³ | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ | ¾ | ¿ |
C_ | À | Á | Â | Ã | Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í | Î | Ï |
D_ | Ð | Ñ | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û | Ü | Ý | Þ | ß |
E_ | à | á | â | ã | ä | å | æ | ç | è | é | ê | ë | ì | í | î | ï |
F_ | ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù | ú | û | ü | ý | þ | ÿ |
All non-visible characters are control characters (see ASCII table from 1 to 31)
Source code
Please, check our dCode Discord community for help requests!
NB: for encrypted messages, test our automatic cipher identifier!
Questions / Comments
Thanks to your feedback and relevant comments, dCode has developed the best ‘ASCII Code’ tool, so feel free to write! Thank you!
ASCII To Text
How To Use The ASCII To Binary Online Converter
You can transform all the ASCII characters to text without any table for conversion. Sometimes it can be difficult to convert them manually because if the characters sets are large, then it would take a lot of time to turn ASCII to text. Therefore, our ASCII to text converter online can do the job for you in a couple of seconds.
You just need to follow the way given below to turn ASCII to text effortlessly:
Conversion Of ASCII To Text Made Uncomplicated
You can now convert any text or character to ASCII format without memorizing or referring to the conversion table. It is difficult to remember all the numbers assigned to 128 characters like for capital B the assigned number is 066, and so on. Now, you can simply add text to our transformer and let it turn it to ASCII for you.
All the applications we use that deal with text are using ASCII numbers to represent them and as computers only take input data as numbers so ASCII is the best representation for these characters that a computer can interpret.
ASCII also includes text that is known as control characters which are used to alter the appearance of text. There are a total of 128 characters, and they are assigned numbers starting from 0-127 each character occupies seven bits which is one bit less than a byte.
ASCII stands for (American Standard Code for Information Interchange), it is basically a file that contains all the characters with assigned codes, but as there aren’t embedded control characters, you can make modifications with a text editor. As all computers use this format, it is easy to share files with other networks as well.
All the files which are documented or contain source codes like for example used for programming are stored as the ASCII text. Other data like executable, graphical, etc. contain stuff that is not viewed or saved in this format because it was only developed for characters that you can write.
A while back FTP (File Transfer Protocol) required preparation for a client to transfer binary files such as setting a command known as SET BINARY, but ASCII files can be transferred without any special conditions. The currently used file transfer protocol transfers both the data (ASCII & Binary) in the exact and correct manner automatically.
ASCII To String Converter & Their Basics
All the keyboard keys are mapped to ASCII values, and the characters can also be viewed as hex values. As the American standard code for information interchange character set limit is 128, it is enough to represent all the needed values, like alphabets, numbers, and control characters. The only problem is some characters are not included in the 128 character sets like the UK pound sign and more.
This is the very reason to why we have to go for the eight-bit extended ASCII character sets. The values in this set continue from 128, all the way to 256 but their every character requires 8 bits, means one byte in total.
Today, still the extended ASCII is not supported by all the networking channels, and most of the communication channels eradicate the eighth bit from these characters. Another disadvantage is the appearance of the text, which cannot be altered or formatted according to how you desire if you save the file as an ASCII document. However, ASCII is essential as it is required to represent any data that is in the text format, and all the computers can display them without any additional conditions.
FoxTools v.2.0
Привет, Гость! Ваш IP: 5.188.119.3
Конвертер картинок в ASCII
Что такое ASCII?
Какой формат лучше?
Html удобно использовать для сохранения изображений в формате html, например, для добавления на сайт. Для создания цветных html изображений, ASCII не используется, вместо пикселей вставляются фиксированные пробелы с определенным фоном. Такие изображения можно без проблем вставить куда угодно, хоть в документ MS Word, хоть в текст сообщения на сайте Odnoklassniki.ru. При этом, структура изображения будет полностью сохранена.
Какие ASCII-символы лучше использовать и в каком количестве?
Зачем уменьшать изображения?
Например, следующиее изображение имеет размер 64×64 пикселей:
Если преобразовать это изображение в набор символов ASCII, то на выходе получится набор текстовых данных, содержащий 64 строки, в каждой из которых будет 64 символа.
Как видите, размер изображения в ASCII увеличился в несколько раз. Если конвертировать в ASCII обычную фотографию, то символов может быть так много, что изображение просто не уместится на экране.
Сайт построен на HTML5
Для корректной работы данного сайта требуется HTML5.
Пожалуйста, воспользуйтесь браузером, который поддерживает HTML5. Многие современные браузеры поддерживают HTML5. Например:
Перевод из string в ASCII
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как ковертировать из ASCII опять в string?
Всем доброго здравия. Нашел программу, которая переводит буквы строки в порядковые номера по.
Перевод кириллицы в ASCII
Задание: В заданной строке после каждой буквы русского алфавита поставить ее код, а после.
Перевод символов в ASCII
#include #include using namespace std; int main () < int a, b; cin.
никаких усилий не нужно
приведу пример:
никаких усилий не нужно
приведу пример:
я решил не проверять файл два раза а забацил следующим образом
на самом деле, у меня длинная строка, разделённая точками. На основе этих точек строка делится на подстроки и переводится в ascii. Убрать точки не получается. мне дальше все эти подстроки надо в двумерных массив забацать. наверно там придётся это убрать.
Да и не в этом дело, похоже. ибо сейчас он возвращает 165 код.
то что в цифрах, так и оставить в цифрах, а слова перевести в ascii.(там таких строк много.)
Всё это сделано, единственное, при переводе слов появляется символ ещё один.
ну и в конце концов всё это загнать в двумерный массив
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Перевод ASCI в ASCII и наоборот
Добрый день учень нужна помощь. немогу никак разобраться с проблемой перевода кодировок, мне.
Перевод строки в ASCII символы
Привет всем! Прошу помочь кое что выяснить. Есть ли в С++ функция перевода строки в символы.
Перевод с двоичной системы в ASCII
Есть последовательность 01010111101101010101101111011 ( к примеру ), как перевести эту.
Перевод символов в код таблицы ascii
помогите перевести элементы символьного массива в код таблицы ascii
Решайтесь на великие поступки — ASCII
ASCII — это самый простой из существующих коммуникационных протоколов и единственный формат данных, который может декодировать любая из существующих компьютерных систем.
Момент посадки на Марс ровера NASA Perseverance (Настойчивость) стал историческим событием. Человечество впервые увидело нечто подобное. Многие люди с замиранием сердца наблюдали за происходящим. «Настойчивость» многие годы будет служить для нас источником вдохновения.
Каждое изображение, поступающее с Марса после успешной посадки ровера, содержало в себе какой-то сюрприз. Одним из таких сюрпризов стало сообщение, зашифрованное в раскраске парашюта марсохода.
Интернет-ищейки заявили о том, что им удалось расшифровать скрытое сообщение, нанесённое на купол парашюта, который помог роверу безопасно приземлиться на поверхность Красной планеты. Как оказалось, фраза «Dare Mighty Things» («Решайтесь на великие поступки») — девиз лаборатории реактивного движения NASA (Jet Propulsion Laboratory) — была закодирована на парашюте с использованием красных и белых полос, представляющих двоичный компьютерный код. Этот код, что неудивительно, можно, используя некоторые вычисления, перевести в кодировку ASCII и, в итоге, понять то, что в нём скрыто.
Ровер сделал этот снимок парашюта в процессе посадки на поверхность Марса
Пользователи Reddit и Twitter обратили внимание на то, что красно-белый узор похож на нечто, способное нести в себе какой-то смысл. Они расшифровали послание, решив, что красные фрагменты представляют единицы, а белые — нули.
Эта история разлетелась по всему миру, благодаря ей кодировка ASCII, о которой говорят не особенно часто, оказалась у всех на слуху.
В этом материале мы поговорим об ASCII, немного коснёмся истории этой кодировки, разберём пример её применения в программном коде. Прочитав эту статью, вы поймёте, что очень сложно не полюбить ASCII, кое-что о ней узнав.
Протокол ASCII
ASCII — это кодировка. Это не протокол. Протоколы могут быть построены на основе ASCII.
На самом деле, так оно и есть, но во множестве документов, которые можно встретить в интернете, ASCII называют не только «кодировкой», но и «протоколом». Поэтому я заранее хочу обратить на это ваше внимание, так как могу называть ASCII и так и так.
ASCII можно назвать самым простым коммуникационным протоколом для передачи текста. При его использовании передаются только обычные и управляющие ASCII-символы. Он предусматривает минимальный контроль ошибок или полное его отсутствие.
Может, в это сложно поверить, но ASCII — это весьма мощная технология. Это — единственный формат данных, который может декодировать любая из существующих компьютерных систем.
Немногие знают о том, что кодировка ASCII появилась в 1960-х годах, когда Лабораториям Белла (Bell Labs) понадобился стандартный способ для передачи текста. Сотрудники Bell Labs реорганизовали телеграфные коды, разобрали их и, совместно с Американской ассоциацией стандартов (American Standards Association, ASA), сформировали ASCII (American Standard Code for Information Interchange, Американский стандартный код для обмена информацией). 1960-е — это время бурного развития компьютерных технологий. Создатели вычислительных машин использовали ASCII. В результате эта кодировка и стала общепризнанным стандартом передачи информации.
Почему вокруг так много всего связано с ASCII? Дело в том, что это отражает то, как люди общаются друг с другом. Для общения мы используем буквы, цифры и специальные символы. В мире, например, очень много всего такого, что надо как-то маркировать. Речь идёт о товарных этикетках, о коробках, об автомобильных покрышках, и много о чём ещё. Компьютеры должны считывать маркировку, что они и делают, используя сканеры штрих-кодов. Потом, если речь идёт о штрих-кодах, их надо преобразовать в ASCII-символы, с которыми уже выполняются дальнейшие действия.
Типичный пример использования ASCII — это составление команд и запросов, которые можно отправлять промышленным устройствам, которые, реагируя на них, выполняют какие-то действия, или отправляют в ответ сведения о собственном состоянии.
Что такое протокол?
Представим, что вы попали на аудиенцию к королеве. При этом кто-то из дворцовых служащих сообщает вам о том, каких правил принято придерживаться во время этого мероприятия. Эти правила и называют протоколом. Понятие «протокол» часто используется в компьютерном мире. Вы вводите веб-адрес в адресную строку браузера, нажимаете Enter, это приводит к выполнению множества операций, браузер и сервер обмениваются данными, после чего запрошенная страница выводится на экране. В ходе обмена данными между сервером и браузером используется определённый набор протоколов.
Понятие «сетевой протокол» скрывает в себе множество смысловых уровней. Обычно «протокол» — это механизм, используемый для передачи пакетов с данными между компьютерами. Но тут мы не будем обращать внимание на транспортную составляющую обмена данными. Мы сосредоточимся на исследовании тех данных, которые передаются по сетям. В частности — изучим сообщения, которые программы отправляют другим программам.
Биты, байты и представление информации
Итак, мы уже немного поговорили об ASCII, а ниже я продемонстрирую примеры работы с ASCII в коде. Но прежде чем я это сделаю, предлагаю немного отклониться от нашей основной темы и поговорить о том, как в цифровом мире кодируется и хранится информация.
«Цифровое представление информации» — это когда всё что угодно представляют исключительно с помощью чисел. Обычная последовательность работы при таком подходе выглядит так:
Двоичные, восьмеричные, десятичные, шестнадцатеричные числа
Существует множество способов представления чисел. Например, возьмём двоичное число 10011111.
Оно равнозначно следующим числам:
Для того чтобы передавать данные по компьютерным сетям эти данные надо представлять в виде байтов. Байт — это группа из 8 битов. С помощью одного байта можно закодировать десятичное число в диапазоне от 0 до 255.
Эта конструкция используется для представления неких данных. Ведь, как известно, компьютер не может хранить «буквы», «цифры», «изображения» или что угодно другое. Компьютер может работать лишь с битами. А бит может пребывать лишь в одном из двух значений: «да» или «нет», «истина» или «ложь», «0» или «1». Называть их можно по-разному, но всё сводится к тому, что их всего два.
Для того чтобы использовать биты для представления чего-то, отличного от «нулей» и «единиц», нужны некие правила. Нужна возможность преобразовывать последовательности битов в нечто вроде букв, цифр, изображений. Делается это с применением некоей схемы кодирования, которую обычно называют просто «кодировкой».
Тут мы говорим о схеме кодирования ASCII. В этой кодировке определено 128 символов (для кодирования 1 символа используется 7 битов). Ниже приведён её фрагмент.
Биты | Символы |
1000001 | A |
1000010 | B |
1000011 | C |
1000100 | D |
1000101 | E |
1000110 | F |
Фактически, при использовании ASCII работа ведётся не с «символами» или с «текстами». Всё сводится к манипулированию битами, «видимыми» через несколько слоёв абстракции.
Помимо ASCII существуют и другие способы кодирования символов, другие способы преобразования последовательностей битов в текстовые данные. Например, это набор символов Unicode. Если имеется соответствие между битами, из которых составлена строка, и кодами Unicode-символов — битовое представление строки можно преобразовать в нечто осмысленное. Если такого соответствия нет — подобное преобразование выполнить не получится.
Для преобразования двоичных данных в числа, которые соответствуют номерам из набора символов Unicode (и для преобразования кодов символов в двоичные данные), могут применяться различные кодировки. В частности, это кодировка UTF-8. Она совместима с ASCII, для представления ASCII-символов в ней применяются 1-байтные коды. Для представления символов из набора Unicode в ней может применяться до 4 байтов на 1 символ.
Если две компьютерные системы обмениваются друг с другом данными, им нужно договориться о том, какую именно кодировку они используют. Например, текстовые данные, представленные на этой странице, закодированы с использованием UTF-8, о чём сервер, передавший страницу, сообщает браузеру, который её принял и вывел на экран.
STX / ETX (протокол ASCII)
Помните вышеприведённую конструкцию? Повторим её ещё раз:
Сокращения STX и ETX обычно используются для обозначения управляющих символов ASCII. У них нет графического представления, они не могут быть выведены на экран, поэтому там, где они используются, обычно применяют их сокращённые наименования. На практике они заменяются на соответствующие ASCII-символы. А именно, STX заменяется на ASCII-символ с кодом 0x02, а ETX — на символ с кодом 0x03.
В записи кодов управляющих символов использована конструкция 0x. Она указывает на применение шестнадцатеричных кодов. Например, 0x01 — это, в десятичном представлении, 1, а в двоичном — 00000001. 0x10 — это 16 в десятичном представлении и 00010000 в двоичном.
С помощью управляющих символов STX (Start of TeXt, начало текста) и ETX (End of TeXt, конец текста) можно сформировать простой пакет, в который упаковываются пользовательские данные. В таком пакете, помимо признаков начала и конца текста, присутствует контрольная сумма (checksum), которая позволяет организовать надёжную передачу данных. Возможно, вы видели подобные конструкции в коде, предназначенном для обмена данными с некими устройствами по сети или через порт RS232.
Пример кода: отправка ASCII-команд через TCP/IP
Исходя из предположения о том, что у нас уже имеется установленное сетевое соединение, нам, для организации обмена данными между программами, нужно всего лишь отправить по этому соединению соответствующую строку. При этом, например, символ STX будет представлен в виде ‘\x02’, а передача H — в виде ‘\x02H\x04’.
ASCII-команды можно отправлять с использованием различных каналов связи. В моём примере будет использован TCP-канал. Пример написан на C# (мы рассмотрим и JavaScript-пример, рассчитанный на платформу Node.js). Этот код будет понятен и тем, кто знает Java.
▍Обзор проекта
Итак, мы будем разрабатывать простое клиент-серверное TCP-приложение.
Вот пример выходных данных, генерируемых в ходе работы нашей клиент-серверной системы.
Пример работы клиент-серверной системы
▍И что всё это значит?
Если вы задались вопросом, который вынесен в заголовок этого раздела — знайте, что меня это порадовало. Сейчас я всё это объясню, прибегнув к фрагментам кода моего приложения. Его полную версию, с которой вы можете поэкспериментировать самостоятельно, можно найти в этом репозитории на GitHub.
▍TCP-клиент
AsciiDemo.TestApp — это наш TCP-клиент. Вот его код (файл Program.cs ):
Код класса Program
Метод Main является точкой входа в приложение.
Этот код устроен очень просто, но если у вас есть по нему вопросы — можете задать их мне. Здесь мы сначала подготавливаем некоторые команды, используя кодировку ASCII, затем преобразуем их в байты и отправляем по сети TCP-серверу. Тут же мы выводим сообщения в консоль.
Сеанс связи с точки зрения клиента
Обратите внимание на то, что мы получаем от сервера подтверждения (ACK/NAK) о получении данных (об этом мы поговорим ниже). В результате оказывается, что наш TCP-клиент может не только отправлять команды серверу, но и получать от сервера ответы.
В консоли можно видеть некоторые необычные символы. Это — визуальные представления управляющих символов, о которых мы говорили выше.
Код метода BuildCommand
▍TCP-сервер
AsciiDemo.TCPListenerApp — это простейший TCP-сервер. Он прослушивает заданный порт, ожидая поступления команд. После получения команды он просто выводит её в консоль (если подобные команды используются для управления неким устройством — оно может, например, выключиться, или прочесть показания некоего датчика), а затем отправляет ответ. В данном случае выполняется отправка ответов ACK или NAK, имитирующих, соответственно, успешное или неудачное выполнение команды. Если нужно — можно организовать любую другую реакцию сервера на подобные команды.
Вот как выглядит то, что выводит в консоль сервер.
Сеанс связи с точки зрения сервера
Как видно, каждый раз, получая команду от клиента, сервер выводит её в консоль, а после этого отправляет клиенту ACK или NAK. То, что происходит в это время на клиенте, мы уже видели.
Вот код метода Main TCP-сервера:
Тут всё устроено очень просто. Сначала мы запускаем сервер на заданном IP-адресе и порте, а потом сервер, в соответствующем цикле, ждёт поступления данных. Вот код этого цикла.
Цикл, используемый в работе сервера
Байты мы преобразуем в ASCII-символы, выводим их в консоль, а после этого отправляем клиенту байты, соответствующие кодам управляющих символов ACK или NAK.
Получение данных от клиента и отправка ему ответа
▍Node.js-реализация клиента
Как уже было сказано, подобный функционал можно реализовать и с использованием других языков программирования. Вот, например, вариант реализации простого TCP-клиента для платформы Node.js.
TCP-клиент для Node.js
Вот что выведет в консоль клиент.
Сеанс связи с точки зрения Node.js-клиента
Клиент подключается к серверу, отправляет ему две команды и выводит ACK/NAK-ответы сервера.
Сервер получает команды от клиента и отправляет ему ответы.
Итоги
Полагаю, что ASCII — это просто потрясающе. Это простая и мощная кодировка, на основе которой несложно создавать коммуникационные протоколы. И она будет актуальна до тех пор, пока люди общаются, используя буквы и цифры.
Использование ASCII при составлении команд и запросов восходит к временам ранних мейнфреймов IBM, при работе с которыми применялись терминалы. Оператор вводил на терминале команды и нажимал на клавишу Return для отправки их компьютеру. Все взаимодействия с этими компьютерами, так как работали с ними люди, были основаны на стандартном ASCII.
Везде, где используется некая маркировка чего-либо, применяется ASCII. Например, каждый сканер штрих-кодов, в сущности, работает с последовательностями ASCII-символов. Эти символы где-то хранятся, их нужно распечатывать, иногда их надо преобразовывать в числовые данные.
Даже сегодня, когда в нашем распоряжении имеются современные протоколы для промышленных устройств, ASCII не теряет актуальности. И так будет ещё очень и очень долго.
Приходилось ли вам создавать собственные реализации протоколов, основанных на ASCII и применяемых для обмена данными с некими устройствами?