Вот способ преобразования двоичных чисел в символы ASCII, который достаточно просто сделать в вашей голове.
1 - конвертировать каждые 4 двоичных цифры в одну шестнадцатеричную цифру.
Вот диаграмма преобразования двоичного числа в шестнадцатеричное:
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = a (the hex number a, not the letter a)
1011 = b
1100 = c
1101 = d
1110 = e
1111 = f
(Шестнадцатеричные числа от a до f - это десятичные числа от 10 до 15. Вот что такое шестнадцатеричное или «основание 16» - вместо каждогоцифра способна представлять 10 различных чисел [0 - 9], как десятичное число или «основание 10», каждая цифра вместо этого способна представлять 16 различных чисел [0 - f].)
Как только вы узнаете, чтодиаграмма, преобразование любой строки двоичных цифр в строку шестнадцатеричных цифр проста.
Например,
01000100 = 0100 0100 = 44 hex
1010001001110011 = 1010 0010 0111 0011 = a273 hex
Достаточно просто, верно?Простое преобразование двоичного числа любой длины в его шестнадцатеричный эквивалент.
(Это работает, потому что шестнадцатеричное - это основание 16, а двоичное - это основание 2, а 16 - это четвертая степень 2, поэтому требуется 4двоичные цифры, чтобы сделать 1 шестнадцатеричное число. 10, с другой стороны, не является степенью 2, поэтому мы не можем преобразовать двоичные числа в десятичные почти так же легко.)
2 - Разделить строкушестнадцатеричных цифр в пары.
При преобразовании числа в ASCII каждые две шестнадцатеричные цифры являются символом.Итак, разбейте шестнадцатеричную строку на наборы из 2 цифр.
Вы бы разбили шестнадцатеричное число, например 7340298b392, на 6 пар, например:
7340298b392 = 07 34 02 98 b3 92
(Обратите внимание, что перед 0 стоитУ меня было нечетное количество шестнадцатеричных цифр.)
Это 6 пар шестнадцатеричных цифр, так что это будет 6 букв.(За исключением того, что я сразу знаю, что 98, b3 и 92 не являются буквами. Я объясню почему через минуту.)
3 - преобразовать каждую пару шестнадцатеричных цифр в десятичное число.
Сделайте это путем умножения (десятичного эквивалента) левой цифры на 16 и добавления 2-й.
Например, b3 hex = 11 * 16 + 3, что равно 110+ 66 + 3, что равно 179. (b шестнадцатеричное число 11 десятичное.)
4 - преобразование десятичных чисел в символы ASCII.
Теперь, чтобы получитьБуквы ASCII для десятичных чисел, просто имейте в виду, что в ASCII 65 - это прописная буква «A», а 97 - строчная буква «a».
Итак, что такое буква 68?
68 - это 4-я буква алфавита в верхнем регистре, верно?
65 = A, 66 = B, 67 = C, 68 = D.
Итак, 68 - «D».
Вы берете десятичное число, вычитаете 64 для заглавных букв, если число меньше 97, или 96 для строчных букв, если число 97 или больше, и это номер буквы алфавита.t связан с этим набором из 2 шестнадцатеричных цифр.
В качестве альтернативы, если вы не боитесь небольшого количества простой шестнадцатеричной арифметики, вы можете пропустить шаг 3 и просто перейти прямо от шестнадцатеричного к ASCII, помня, например, что
hex 41 = 'A'
hex 61 = 'a'
Так что вычтите 40 шестнадцатеричных для заглавных букв или 60 шестнадцатеричных для строчных букв, и преобразуйте то, что осталось в десятичную, чтобы получить номер буквы алфавита.
Например,
01101100 = 6c, 6c - 60 = c = 12 decimal = 'l'
01010010 = 52, 52 - 40 = 12 hex = 18 decimal = 'R'
(При этом полезно помнить, что «m» (или «M») - это 13 букв алфавита.Таким образом, вы можете считать от 13 до 13, чтобы найти букву ближе к середине, чем к любому концу.)
Я видел это однажды на рубашке и смог прочитать это в своей голове:
01000100
01000001
01000100
Я сделал это так:
01000100 = 0100 0100 = 44 hex, - 40 hex = ucase letter 4 = D
01000001 = 0100 0001 = 41 hex, - 40 hex = ucase letter 1 = A
01000100 = 0100 0100 = 44 hex, - 40 hex = ucase letter 4 = D
Рубашка с надписью "DAD", что, как мне показалось, было круто, поскольку ее покупала беременная женщина.Ее муж, должно быть, такой же выродок, как я.
Как я сразу понял, что 92, b3 и 98 - это не буквы?
Поскольку ASCII-код для строчной буквы 'z' равен 96 + 26 = 122, что в шестнадцатеричном виде равно 7a.7а - самое большое шестнадцатеричное число для буквы.Все, что больше 7a, не является буквой.
Так вот, как вы можете сделать это как человек.
Как это делают компьютерные программы?
Для каждогонабор из 8 двоичных цифр, преобразование его в число и поиск в таблице ASCII.
(Это один довольно очевидный и прямой путь. Типичный программист, вероятно, мог бы придумать 10 или 15 других способов в течение нескольких минут. Детали зависят от среды компьютерного языка.)