The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"bc. Проблема перевода чисел из 16 в 2 систему счисления"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"bc. Проблема перевода чисел из 16 в 2 систему счисления"  +/
Сообщение от guseniza email(ok) on 24-Дек-12, 18:27 
По snmp с коммутатора получаю данные о том, в какой vlan какие порты вкл untag либо  access.
по каждому vlan получаю 16-ое число типа: FFFFBF00
Необходимо для скрипта перевести его в двоичный вид.
Все очень просто:
bin=`echo "ibase=16; obase=2; $hex" | bc`
на выходе имеем 32 битное число:  
11111111111111111011111100000000

Но если 16-ричное число имеет вид: 00004000, то уже возникает проблема.
Получаю не 32 бита, а 100000000000000. т.е. все нули до "1" "съедаются". но для того, чтобы посчитать номер порта необходимо иметь все 32 бита.

как можно избежать этого?
может нужно добавлять нули до количества 32?
или использовать таблицу перевода чисел, а потом просто побитово конкатенировать?:))
Последний вариант стремный:)

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +/
Сообщение от pavlinux (ok) on 24-Дек-12, 18:49 
> чтобы посчитать номер порта необходимо иметь все 32 бита.

Гон

> как можно избежать этого?
> может нужно добавлять нули до количества 32?

bin=$(printf "%032d\n" `echo "ibase=16; obase=2; $hex" | bc`);

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  –1 +/
Сообщение от guseniza email(ok) on 24-Дек-12, 19:12 
>> чтобы посчитать номер порта необходимо иметь все 32 бита.
> Гон
>> как можно избежать этого?
>> может нужно добавлять нули до количества 32?
> bin=$(printf "%032d\n" `echo "ibase=16; obase=2; $hex" | bc`);

Извините, конечно, но не гон. подсчет идет с первого элемента. По простому,  каким он будет по счету - вот вам  и номер порта. Если вы видите в другом свете - проясните:)
Ваш пример работает, спасибо:)
но он не универсален:
работает только для подобного варианта 00002000.


уже сделал. Наиболее простой вариант в цикле добавлять в начало строки необходимое количество "0".

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +/
Сообщение от pavlinux (ok) on 25-Дек-12, 00:59 
>>> чтобы посчитать номер порта необходимо иметь все 32 бита.
> Ваш пример работает, спасибо:)
> но он не универсален:
> работает только для подобного варианта 00002000.

Это ни у меня не работает, это у вас не работает;

$ hex=fff0fff0
$ echo "ibase=16; obase=2; $hex" | bc;
0
$ hex=0fff0fff0
$ echo "ibase=16; obase=2; $hex" | bc;
(standard_in) 1: syntax error

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +1 +/
Сообщение от Andrey Mitrofanov on 15-Янв-13, 09:49 
> $ hex=fff0fff0
> 0
> $ hex=0fff0fff0
> (standard_in) 1: syntax error

:)))
man bc: ""(Note: They must be capitals.  Lower case letters are variable  names.)

#!/bin/bash
echo "obase=2; $((16#$hex))" | bc

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +/
Сообщение от Bill1389 email on 14-Янв-13, 21:46 
А скриптиком не поделишься?Очень интересна реализация такого.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  –1 +/
Сообщение от guseniza email(ok) on 17-Янв-13, 16:26 
$binport получает строку типа: FFFFFD00

          binports=`echo "ibase=16; obase=2; $hexports" | bc`

          len=${#binports}    
            if [ "$len" -ne "32" ]; then
            a=32    
            let "b=$a - $len"    # вычисляем количество нулей недостающих до 32

            for  (( n=1; $n <= $b; n=$(($n+1)))); do # добавляем нули в начало строки
            binports='0'${binports}
            done
            fi

Скрипт далеко не красавец, но если не нравится - переделайте. выложите сюда - прекрасно:)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +1 +/
Сообщение от Аноним (??) on 17-Янв-13, 23:15 
> Скрипт далеко не красавец, но если не нравится - переделайте.

Скрип просто урод :(
Лекарство: man printf

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  –2 +/
Сообщение от Maxim (??) on 02-Июл-14, 13:00 
>> Скрипт далеко не красавец, но если не нравится - переделайте.
> Скрип просто урод :(
> Лекарство: man printf

Покажите пожалуйста альтернативу этого скрипта, только не урод :)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +/
Сообщение от pavlinux (ok) on 05-Июл-14, 15:54 
>>> Скрипт далеко не красавец, но если не нравится - переделайте.
>> Скрип просто урод :(
>> Лекарство: man printf
> Покажите пожалуйста альтернативу этого скрипта, только не урод :)

"Лекарство: man printf"

printf "%032b\n"  $(echo "ibase=16; obase=2; FFFFFD00" | bc)

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +/
Сообщение от Ingoa on 08-Сен-14, 17:55 
>>>> Скрипт далеко не красавец, но если не нравится - переделайте.
>>> Скрип просто урод :(
>>> Лекарство: man printf
>> Покажите пожалуйста альтернативу этого скрипта, только не урод :)
> "Лекарство: man printf"
> printf "%032b\n"  $(echo "ibase=16; obase=2; FFFFFD00" | bc)

              ~~

printf "%032d\n"  $(echo "ibase=16; obase=2; FFFFFD00" | bc)

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

12. "bc. Проблема перевода чисел из 16 в 2 систему счисления"  +/
Сообщение от pavlinux (ok) on 09-Сен-14, 02:03 
>> printf "032b\n"  $(echo "ibase=16; obase=2; FFFFFD00" | bc)
>              ~~
> printf "032d\n"  $(echo "ibase=16; obase=2; FFFFFD00" | bc)

Тема не смотреть, заголовок не читать, сразу писать?

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру