LINUX.ORG.RU

если я не глючу то так - 

echo  test | hexdump -C

00000000  74 65 73 74 0a |test.|
00000005

echo "obase=2;ibase=16; 74" | bc -l
1110100

WerNA ★★★★★
()
Ответ на: комментарий от pisun

Для того что бы пользоваться ручкой и листиком для того чтобы закодировать/расскодировать любое слово в двоичную систему понадобиться следующее:

1) Таблица кодов (например ASCII) 2) Элементарные познания в двоичной системе счисления :))

Напимер слово "TEST" - это послндователность ASCII-кодов 84,69,83,84 В двойчной системе счиесления 84 это 1010100, 69 - 1000101, 83 - 1010011

Как формируется из десятичного двоичного понятно? На всякий случай объясняю: 84/2=42 Остаток=0 42/2=21 Остаток=0 21/2=10 Остаток=1 10/2=5 Остаток=0 5/2=2 Остаток=1 2/2=1 Остаток=0

Нас интересуют все еденицы и нули в остатках в обратном порядке, но первым значением является результ последней операции (2/2=1). Записываем все по порядку и получаем: 1010100

Если вас интересует разрядность двоичного числа, т.е. оно должно быть к примеру 8 разрядным, то просто дописываете в левую часть недостающие нули - например: 1010100 -> 01010100

Удачи.

anonymous
()
Ответ на: комментарий от anonymous

Совсем забыл о обратном кодированиии из 01010100 в число и далее символ :)

Ну с последним вроде понятно, ищешь десятичное число в кодовой таблице (например ASCII) и находишь его значение - "T"

А вот как преобразовать двоичное число в десятичное ...

Здесь главную роль играет значение разряда. Во превых каждый бит (1 или 0) в зависимости от того где он находится в числе имеет свое значение. Достаточно умножить каждый разряд на свое значение и потом сложить результаты и получится десятичное значение этого двоичного числа. Например распишем 01010100 в вертикали что бы было понятно:

0 x 128 = 0

1 x 64 = 64

0 x 32 = 0

1 x 16 = 16

0 x 8 = 0

1 x 4 = 4

0 x 2 = 0

0 x 1 = 0

Складываем: 64+16+4 = 84 или символ T согласно таблице ASCII :)

На всякий случай поясню, что значение самого правого разряда в двоичном числе всегда равно 1, далее следую в левую сторону значение разряда вычисляется умножением на два значения разряда справа. И т.д. 1,2,4,8,16,32,64,128,256 и т.д. или читая правильно с права на лево будет 256,128,64,32,16,8,4,2,1

Удачи

0 - 1

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (21.01.2005 15:08:57) уже всё объяснил лучше некуда =)

Но обратное на компе сделать тоже можно =)

имеем двоичное число - скажем 1110100

hex=`echo "obase=16;ibase=2; 1110100" | bc -l`

и вывести символ printf "\x$hex\n"

WerNA ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.