oct関数の使い方(8進数/16進数/2進数を表す文字列を10進数に変換)
Perl で用意されている組み込み関数の一つである oct 関数の使い方です。 oct 関数は対象の文字列を 8 進数/ 16 進数/ 2 進数の数値と見なし 10 進数の数値に変換します。
(2022 年 09 月 27 日公開 / 2022 年 09 月 27 日更新)
oct関数の書式と基本的な使い方
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)'; my $num1 = oct("045"); my $num2 = oct("0xA4"); my $num3 = oct("0b1101"); my $num4 = oct("37"); print "045 -> $num1\n"; print "0xA4 -> $num2\n"; print "0b1101 -> $num3\n"; print "37 -> $num4\n";
上記を「test12-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
-- --
Perl で用意されている組み込み関数の一つである oct 関数の使い方について解説しました。
( Written by Tatsuo Ikura )