Преобразование hex to bin

romek

Guest
Преобразование hex to bin

Есть значение:
00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 C0 08 00 00 00 00 00
00 00 00 00 00 0C 00 88 00 00 00 00 00 00 00 00
00 00 81 80 DF 80 00 00 00 00 00 00 00 00
как преобразовать его в двоичное.
Сначала hexdec - получается. А вот decbin выводит 0. Помогите пожалуйста.

-~{}~ 30.06.05 19:27:

Виноват.
ОС: FC4
PHP: 4.3.11
 

SiMM

Новичок
> Сначала hexdec - получается.
Что получается?

> А вот decbin выводит 0
Подойди к задаче с другого конца.
[m]hexdec[/m]
[m]decbin[/m]
[m]base_convert[/m]
[m]explode[/m]
[m]join[/m]
Хотя в целом задача решается одним регулярником...
 

romek

Guest
hexdec - выводит десятичное значение из шестнадцатиричного. Например 1.9053641054175E+1400.
dechex(полученного десятичного числа) возвращает 0.

По всей видимости проблема в том, что шестнадцатиричное число слишком большое. Но мне нужно именно такого размера числа преобразовывать.

-~{}~ 30.06.05 19:43:

decbin(полученного десятичного числа) возвращает 0.
 

SiMM

Новичок
> hexdec - выводит десятичное значение из шестнадцатиричного.
С чего вы взяли что она работает со строками того типа, который вы привели выше? Хорошо, пусть даже работает - поясните логику её работы - что должно получиться и почему.
 

romek

Guest
Я пишу прогу по управлению коммутаторами Zyxel по SNMP. Для IES-1000 (с меньшим количеством портов) VLAN'ы выводятся как FC 00 00 00. После моего преобразования получаю 111111000000 и т.д. сколько-то там нулей. Т.е. в 32 VLAN'е порты с 1 по 5 (там где единицы, первая единица говорит о том, что VLAN вообще активен). И это есть правильно, проверено.
А вот с IES-2000 где у меня 72 порта получается то, что я описывал ранее.
 

SiMM

Новичок
romek, да при чём здесь ваш VLAN? Я у вас спрашиваю о функции hexdec. Меня не интересует, что там у вас проверено - всё, что вам нужно - прочитать мануал и исходя из него объяснить, почему вы ожидаете от этой функции определённого поведения. И всё.
PHP:
echo preg_replace('#[0-9A-F]#sei','sprintf("%04b",0x$0)',$str);
Свободны.
 

nerezus

Вселенский отказник
помню я как писал =)
математичискими функциями :) 8 строчек :)

меня SiMM в sprintf тыкал потом :)
 
Сверху