oct関数:8進数や16進数や2進数を表す文字列を10進数に変換する

Perl で用意されている組み込み関数の一つである oct 関数の使い方です。 oct 関数は対象の文字列を 8 進数/ 16 進数/ 2 進数の数値と見なし 10 進数の数値に変換します。

(Last modified: )

oct関数の書式と基本的な使い方

oct 関数は次のように定義されています。

oct([EXPR])

対象の文字列を8進数/16進数/2進数の数値と見なし、10進数の数値に変換しま
す。

パラメータ:
  EXPR  対象の文字列
戻り値:
  10進数の数値

省略可能な 1 番目の引数には対象となる文字列を指定します。省略された場合は変数 $_ が使用されます。関数が呼び出されると、引数に指定した文字列を、文字列の形式に従って 8 進数/ 16 進数/ 2 進数の数値と見なし 10 進数の数値に変換して戻り値として返します。

引数に指定する文字列の先頭が "0" で始まる場合は 8 進数、 "0x" で始まる場合は 16 進数、 "0b" で始まる場合は 2 進数として解釈します。何も付いていない場合も 8 進数と解釈します。

具体的には次のように記述します。

my $num1 = oct("045");
my $num2 = oct("0xA4");
my $num3 = oct("0b1101");
my $num4 = oct("37");

この場合、 "045" は 8 進数と見なされ 10 進数の 37 へ、 "0xA4" は 16 進数と見なされ 10 進数の 164 へ、 "0b1101" は 2 進数と見なされ 10 進数の 13 へ、 "37" は 8 進数と見なされ 10 進数の 31 へ変換されます。

※合わせて「hex関数」を参照して下さい。また10進数から8進数などに変換する場合は「sprintf関数」を参照して下さい。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

print "045 -> ".oct("045")."\n";
print "0xA4 -> ".oct("0xA4")."\n";
print "0b1101 -> ".oct("0b1101")."\n";
print "37 -> ".oct("37")."\n";

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

oct関数:8進数や16進数や2進数を表す文字列を10進数に変換する(1)

引数に指定した 2 進数 、 8 進数 、 16 進数を表す文字列を、 10 進数の数値に変換したものを取得しました。

-- --

Perl で用意されている組み込み関数の一つである oct 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。