文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Perl中各种进制的转换

Perl中各种进制的转换

时间:2009-04-05  来源:taoyuliang

文章出处:http://www.perl.it/documenti/faq/view.html?pag=4&faq=5&lng=en

How do I convert between numeric representations/bases/radixes?

As always with Perl there is more than one way to do it. Below are a few examples of approaches to making common conversions between number representations. This is intended to be representational rather than exhaustive.

Some of the examples below use the Bit::Vector module from CPAN. The reason you might choose Bit::Vector over the perl built in functions is that it works with numbers of ANY size, that it is optimized for speed on some operations, and for at least some programmers the notation might be familiar.

  • How do I convert hexadecimal into decimal

    Using perl's built in conversion of 0x notation:

     $dec = 0xDEADBEEF;

    Using the hex function:

     $dec = hex("DEADBEEF");

    Using pack:

     $dec = unpack("N", pack("H8", substr("0" x 8 . "DEADBEEF", -8)));

    Using the CPAN module Bit::Vector:

     use Bit::Vector;
    $vec = Bit::Vector->new_Hex(32, "DEADBEEF");
    $dec = $vec->to_Dec();
  • How do I convert from decimal to hexadecimal

    Using sprintf:

     $hex = sprintf("%X", 3735928559); # upper case A-F
    $hex = sprintf("%x", 3735928559); # lower case a-f

    Using unpack:

     $hex = unpack("H*", pack("N", 3735928559));

    Using Bit::Vector:

     use Bit::Vector;
    $vec = Bit::Vector->new_Dec(32, -559038737);
    $hex = $vec->to_Hex();

    And Bit::Vector supports odd bit counts:

     use Bit::Vector;
    $vec = Bit::Vector->new_Dec(33, 3735928559);
    $vec->Resize(32); # suppress leading 0 if unwanted
    $hex = $vec->to_Hex();
  • How do I convert from octal to decimal

    Using Perl's built in conversion of numbers with leading zeros:

     $dec = 033653337357; # note the leading 0!

    Using the oct function:

     $dec = oct("33653337357");

    Using Bit::Vector:

     use Bit::Vector;
    $vec = Bit::Vector->new(32);
    $vec->Chunk_List_Store(3, split(//, reverse "33653337357"));
    $dec = $vec->to_Dec();
  • How do I convert from decimal to octal

    Using sprintf:

     $oct = sprintf("%o", 3735928559);

    Using Bit::Vector:

     use Bit::Vector;
    $vec = Bit::Vector->new_Dec(32, -559038737);
    $oct = reverse join('', $vec->Chunk_List_Read(3));
  • How do I convert from binary to decimal

    Perl 5.6 lets you write binary numbers directly with the 0b notation:

     $number = 0b10110110;

    Using oct:

     my $input = "10110110";
    $decimal = oct( "0b$input" );

    Using pack and ord:

     $decimal = ord(pack('B8', '10110110'));

    Using pack and unpack for larger strings:

     $int = unpack("N", pack("B32",
    substr("0" x 32 . "11110101011011011111011101111", -32)));
    $dec = sprintf("%d", $int);
     # substr() is used to left pad a 32 character string with zeros.

    Using Bit::Vector:

     $vec = Bit::Vector->new_Bin(32, "11011110101011011011111011101111");
    $dec = $vec->to_Dec();
  • How do I convert from decimal to binary

    Using sprintf (perl 5.6+):

     $bin = sprintf("%b", 3735928559);

    Using unpack:

     $bin = unpack("B*", pack("N", 3735928559));

    Using Bit::Vector:

     use Bit::Vector;
    $vec = Bit::Vector->new_Dec(32, -559038737);
    $bin = $vec->to_Bin();

    The remaining transformations (e.g. hex -> oct, bin -> hex, etc.) are left as an exercise to the inclined reader.

相关阅读 更多 +
排行榜 更多 +
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载
几何飞行安卓版

几何飞行安卓版

飞行射击 下载