LINUX.ORG.RU

Преобразование числа из символьного представление в бинарное


0

0

Можно ли стандартными средствами (bash, awk, etc) выполнить следующее.

Есть скрипт, на вход которому приходит число в текстовом представлении (напр. 123456). Скрипт должен на выход дать это же число, но уже в бинарном представлении. Т.е. что-то вроде C-ишных atoi() и strtol().

С не предлагать, т.к. и сам знаю :) А вот скриптом как - это интересно.

anonymous

Ответ на: комментарий от hyde

:) Не знаю как точно выразиться. Я имел в виду, что строка преобразовывается в число и отдается на выход.

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

Мне нужно в некий бинарный файл записать не строку 123456, а число 123456. Написать фильтр на С, который будет принимать строку, а выдавать на выход число - не проблема, Но возможно уже есть _стандартное_ средство для этого? Так яснее?

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

Вообще стандартный ответ на вопрос "как в скриптах написать что-то, что можно написать только на C" - писать на perl

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

Ошибаешься. Ставить perl на embedded систему не всегда оправдано, особенно ради такого случая :)

anonymous
()

$ echo 123456 | awk '{N = $1; for(i=3;i>=0;--i) { a[i] = N%256; N=N/256}; printf"%c%c%c%c", a[0], a[1], a[2], a[3]}' | hexdump
0000000 0100 40e2
$ perl -e 'print 0x0001e240, "\n"'
123456

anonymous
()

> Есть скрипт, на вход которому приходит число в текстовом представлении (напр. 123456). Скрипт должен на выход дать это же число, но уже в бинарном представлении.

если без hexdump/od, то хвостовой рекурсией:):

megaconv()
{
    read X Y
    if test $X -eq 0; then
        echo $Y
        return
    fi
    {
        expr $X / 2 | tr \\n ' '
        expr $X % 2 | tr -d \\n
        echo $Y
    } | megaconv
}

$ echo 77 | megaconv  
1001101

достоинством является полная стандарность

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