Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Перевод из десятичного в шестнадцатиричное?


Автор: Serg777 2.9.2006, 12:27
Как сделать такое?
Может есть готовые процедуры или нужно писать свою?

Автор: Nab 2.9.2006, 14:37
помогут функции pack и unpack...

Автор: Serg777 2.9.2006, 18:59
$a = unpack("H12", pack("N", $a));
Сделал вот так, преобразует нормально.
Но ограничение в 32 бита!
Т.е. Большие числа обрезает!

$a = unpack("H12", pack("q", $a));
Так не обрезает, но число получается исковерканое.

Подскажите пожалуйсте, как правильно?


Автор: Nab 2.9.2006, 19:11
Я немного  не понял что и куда Вы конвертировать собрались?

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

Что именно Вам преобразовать надо?

Автор: Serg777 2.9.2006, 23:08
Мне нужно преобразовать число из десятичного в шестнадцатиричный формат.

Автор: Nab 3.9.2006, 03:45
Я не особенно знаком с этими функциями, но
если число целое то думаю так:
Код

print unpack('H*',pack('L*', $a));

если оно много больше 32-битного целого, то наверно вручную разбивать прийдется...

Автор: amg 4.9.2006, 06:24
Еще так можно: 
Код
$hex = sprintf "%x", $dec;

А если число большое, то можно использовать модуль:
Код
use Math::BigInt;
$x = Math::BigInt->new($dec);
$hex = $x->as_hex();

Автор: nitr 4.9.2006, 09:22
если надо вида 0xXX, то

Код

$hex = sprintf "%#x", $dec;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)