16進を10進に変換する方法

6:Re:[5]:16進を10進に変換する方法
江須扇 08/19 16:49
ご指摘の通りですね。

COMP-1場合、
−32768≦x≦32767
となり、上1桁目のビットは負をあらわすので、
16進数を単純に10進数に戻せない場合があると言うことですね。

例えば、

02 REI1 USAGE IS COMP-1
02 REI1-ANS PIC 9(5)

IF REI1 < 0
   THEN COMPUTE REI1-ANS = REI1 + 65536
   ELSE MOVE REI1 TO REI1-ANS
END-IF

等の工夫が必要という事ですね。


2バイトまでしか使えないので、
4バイトの場合はCOMP-2を使いますがこれも
−2147483648≦y≦2147483647
なので

02 REI2 USAGE IS COMP-2
02 REI2-ANS PIC 9(10)

IF REI2 < 0
   THEN COMPUTE REI2-ANS = REI2 + 4294967296
   ELSE MOVE REI2 TO REI2-ANS
END-IF

6バイトの場合は

02 REI3.
  03 REI31 USAGE IS COMP-1
  03 REI32 USAGE IS COMP-2
02 REI31-ANS PIC 9(05)
02 REI32-ANS PIC 9(10)
02 REI3-ANS  PIC 9(15)

IF REI31 < 0
   THEN COMPUTE REI31-ANS = REI31 + 65536
   ELSE MOVE REI31 TO REI31-ANS
END-IF
IF REI32 < 0
   THEN COMPUTE REI32-ANS = REI32 + 4294967296
   ELSE MOVE REI32 TO REI32-ANS
END-IF
COMPUTE REI3-ANS = REI31-ANS * 4294967296 + REI32-ANS

等の作業が必要と言うことでしょうか?


1-

BluesBB ©Sting_Band