私は最近、シングルバイナリバイトの月フィールドのテキスト表現を解析するスクリプトを書きました。
(尋ねないでください:-{)
しばらくsprintfをいじった後、私はあきらめてこれをしました。
our %months = qw / x01 1
x02 2
x03 3
x04 4
x05 5
x06 6
x07 7
x08 8
x09 9
x0a 10
x0b 11
x0c 12 /;
...
my $month = $months{$text};
私は12の数値しか使用していないので、これでうまくいきますが、これを行うより良い方法はありますか?
あなたが持っている場合
$hex_string = "0x10";
あなたは使うことができます:
$hex_val = hex($hex_string);
そして、あなたは得るでしょう:$hex_val == 16
hex
は「0x
"を文字列の先頭に追加します。これがない場合でも、16進数の文字列を数値に変換します。
oct
を使用して、2進数、8進数、16進数の文字列をプレフィックスに基づいて数値に変換することもできます。
0b
-バイナリ0
-8進数0x
-16進数私が正しく理解していれば、月に1バイトあります。「0x10」の文字列ではなく、10のバイトです。
このように、 npack を使用する必要があります:
my $in = "\x0a";
print length($in), "\n";
my ($out) = unpack("c", $in);
print length($out), "\n", $out, "\n"
出力:
1
2
10
入力が「x05」のような3文字の場合、変更も非常に簡単です。
my $in = "x0a";
my $out = hex($in);