重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

下記、16進数データをPerlで数値変換する方法が分からずに悩んでいます。
※0xは16進数表記

0x00100C → +100
0x00100D → -100
0x00100F → 100

ご教授の程、宜しくお願い致します。m(_)m

質問者からの補足コメント

  • ≫・+100 と (+ も - も付かない) 100 とは, なにがどう違うのでしょうか?
    符号つきのデータ形式か符号なしのデータ形式かの違いとなります

    ≫この 3つの値だけを考えればいいのでしょうか?
    はい、この3つだけです

    ≫何をどのように変換すればいいのですか?
    0x00100C → +100 (HEXのCを+、HEXの00100を100)
    0x00100D → -100 (HEXのDを-、HEXの00100を100)
    0x00100F → 100 (HEXのFを無視、HEXの00100を100)

    宜しくお願い致します m(_)m

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/03/29 04:22

A 回答 (5件)

面倒なことしてるねぇ>#4.



Perl のバージョンにもよるけど今のやつなら
$y = (sprintf '%X', $x) =~ s/^(\d+)([CDF])$/($2 eq 'D' ? -1 : 1) * $1/er;
の 1行でいけるんじゃないかなぁ.
    • good
    • 0

うーん。

もしかして、COBOLのCOMP-3形式を10進数に変換したいのでしょうか。
http://wtar00.seesaa.net/article/430725080.html

そうでしたら以下のようになります。
#Convert COBOL COMP-3 into decimal.
$var1 = 0x00100C;
$var2 = 0x00100D;
$var3 = 0x00100F;

&conv($var1);
&conv($var2);
&conv($var3);

$var1 = 0x12345C;
$var2 = 0x67890D;
$var3 = 0x54321F;
&conv($var1);
&conv($var2);
&conv($var3);


sub conv
{
my ($data) = shift(@_);
printf("in=%0X\n",$data);
#符号を決定
my $sign = 1;
if (($data & 0x0f) == 0x0d){
$sign = -1;
}
$data = $data >> 4;
my $val = 0;
my @array = ();
while($data > 0){
push(@array,($data & 0x0f));
$data = $data >> 4;
}
for(my $i = scalar(@array)-1; $i >= 0; $i--){
$val = 10 * $val + $array[$i];
}
$val *= $sign;
printf("out=%d\n",$val);
}
------------------------------
convの入力データがCOMP-3形式です。
conv内の$valが変換結果です。
符号なしのケースと符号あり+のケースは、同じ扱い(+)となります。

以下、実行結果です。
ーーーーーーーーーーーーーーーーー
in=100C
out=100
in=100D
out=-100
in=100F
out=100
in=12345C
out=12345
in=67890D
out=-67890
in=54321F
out=54321
    • good
    • 0

#2 で書かれていますが Perl の数値データはすべて「符号付き」です. 「符号なし」という形式の数値データは存在しません.



で 3つだけならハッシュが一番簡単だろうねぇ.
    • good
    • 0

perlでは、符号付きと符号なしを区別していません。


$xに+100を設定する場合と
$xに100を設定する場合は、どのようになりますか。

あなたが期待しているのは、
$x = +100;
$x = 100;
ということでしょうか。
    • good
    • 0

確認です.



・+100 と (+ も - も付かない) 100 とは, なにがどう違うのでしょうか?
・この 3つの値だけを考えればいいのでしょうか? そうでないとしたら, 何をどのように変換すればいいのですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!