請問如何轉換成十進位?

若有一字串

$a = "10101010";

如果字串 $a 為二進位如何轉換成十進位?

如果字串 $a 為八進位如何轉換成十進位?

如果字串 $a 為十六進位如何轉換成十進位?

Update:

可以用 pack 與 unpack 方式來轉換嗎?

1 Answer

Rating
  • Anonymous
    1 decade ago
    Favorite Answer

    程式碼如下:

    ================================

    #/usr/bin/perl

    $a = "10101010";

    $b = eval("0b" . $a);

    $o = oct($a);

    $h = hex($a);

    print "$a(2 進位) = $b(10 進位)\n";

    print "$a(8 進位) = $o(10 進位)\n";

    print "$a(16 進位) = $h(10 進位)\n";

    執行結果如下:

    ==============================

    10101010(2 進位) = 170(10 進位)

    10101010(8 進位) = 2130440(10 進位)

    10101010(16 進位) = 269488144(10 進位)

    2007-08-14 17:50:07 補充:

    可以把程式碼貼到 http://www.codeide.com/ 網站上執行

    2007-08-15 14:25:48 補充:

    是否這不是你要的結果?

    2007-08-15 17:11:46 補充:

    pack, unpack並沒有辦法達成你要的目的

    請參考 http://perldoc.perl.org/functions/pack.html

    2007-08-15 17:53:16 補充:

    只能達到部份你要的目的

    因為 pack, unpack 沒有 8 進位的編碼

    #/usr/bin/perl

    sub bin2dec {

    unpack("N", pack("B*", substr("0" x 32 . shift, -32)));

    }

    sub hex2dec {

    unpack("N", pack("H8", substr("0" x 8 . shift, -8)));

    }

    $a = "10101010";

    printf "$a(2 進位) = %s(10 進位)\n", bin2dec($a);

    printf "$a(16 進位) = %s(10 進位)\n", hex2dec($a);

    2007-08-15 17:53:59 補充:

    答案如下:

    10101010(2 進位) = 170(10 進位)

    10101010(16 進位) = 269488144(10 進位)

    2007-08-15 19:55:08 補充:

    終於想到方法了,8 進位轉 10 進位,

    不能直接,只好間接轉

    sub oct2dec {

    my $b = unpack("B*", pack("H*", substr("0" x 8 . shift, -8)));

    $b =~ s/0([01]{3})/$1/g;

    my $o = unpack("N", pack("B*", substr("0" x 32 . $b, -32)));

    }

    $a = "10101010";

    printf "$a (8 進位) = %s (10 進位)\n", oct2dec($a);

    2007-08-15 20:10:32 補充:

    完整程式請到這下載,三十天後自動會移除:

    http://w14.easy-share.com/3309051.html

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.