Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

[掲示板に戻る]


Re:16進を10進に変換する方法 ゼロ 2006-8-18 10:18
Re:16進を10進に変換する方法 江須扇 2006-8-19 7:35

4 Re:16進を10進に変換する方法
ゼロ 2006-8-18 10:18  [返信] [編集]

遅くなりましたが、江須扇様レスありがとうございました。


USAGE COMP-1を使用してレコード長、ブロック長、更新回数は問題なく10進に変換できました。


01 FDF-RECORDSIZE PIC X(2).  : 内容 '0256'(h)
01 WORK-RECORDSIZE.
 02 WORK-RSIZ1  PIC X(5).
 02 WORK-RSIZ2  REDEFINES WORK-RSIZ1 USAGE COMP-1.

MOVE FDF-RECORDSIZE TO WORK-RSIZ2.


これで、WORK-RSIZ1の内容が’256d’になっていました。

USAGE COMP-1の仕組みがよく理解できていないので結果論ですが、16進数→10進数の変換は出来たようです。

問題になったのが第1〜第4エクステント開始終了アドレス。
これは上記の方法で変換するとまったく意味不明な値が帰ってきたので下記のような変換テーブルを作って1バイトづつ判断して内部16進から外部16進に変換しました。
あとは16進→10進への計算ルーチンを作って10進にしました。
もっといい方法があるかもしれませんがこれしか思いつきませんでした。


01 H-TABLE  PIC X(16) VALUE ""00010203・・・0D0EOF"".
01 H-TBL  REDEFINES H-TABLE PIC X(1) OCCURS 16 TIMES.
01 D-TABLE  PIC X(32) VALUE "00010203・・・0D0E0F".
01 D-TBL  REDEFINES D-TABLE PIC X(2) OCCURS 16 TIMES.

5 Re:16進を10進に変換する方法
江須扇 2006-8-19 7:35  [返信] [編集]

>2バイト単位しか利用できませんが、USAGE COMP-1
>を利用したらいかがでしょうか?


という事で、4バイトの場合は、 USAGE COMP-2
を利用していただくこととなります。
但し、
COMP-1 が−32768≦x≦32767
COMP-2 が−2147483648≦y≦2147483647
となります。

詳しくは、COBOL言語説明書、2.4.3.4 データの表現形式
をご覧下さい。

BluesBB ©Sting_Band