最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

5.11.16進数形式の文字表現の作り方

[ Previous ] [ HOME ] [ Upper ] [ Next ]


「16進数形式の文字表現」って何のこと? と思われる方も居ると思います。こういうことです。たとえば、DSPPFMで、データを表示しているときに、切り替えて16進数形式の表示ができますよね。ディスク上、ヘキサX'40'なら、文字で、‘40‘と表示しています。つまり、ヘキサだけでいうなら、一バイトX'40'を、2バイトX'F4F0'と変換しているわけです。

ユーティリティで、たとえば、CPYFでOUTFMT(*HEX)と同じように、文字と16進数形式の文字表現をともに印刷したいとき、実際の一バイトを2バイトのヘキサ表現に変換する必要が出てきます。残念ながら、QDCXLATEは使えません。なぜなら、QDCXLATEは1バイトを1バイトに変換することだけで、1バイトを2バイトには変換できないのです。

この方法は、たくさんあると思います。

ディスク上の一バイトを、10進数にして、これが1から256までの配列の要素を作成することで、16進数形式に変換する方法が一番単純です。つまり、先読み配列に、00,01,02,03,04,......,FFを256っ個準備して、1バイトを10進数に変換して、その10進数をそのまま配列の指標にしてしまえば、ルックアップをしなくてもすみます。ただし、逆に16進数形式の文字表現を、1バイトに変換するためにはどうしてもLOKUPせねばなりません。LOKUPした結果の配列の指標(10進数)を1バイトに変換します。

配列がたっぷりあるのが気になりませんか?

そこで、たとえばこんなのはどうでしょうか。

そもそも16進数は、0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fの16っ個の文字しか使いません。だから16進数というのですよね。そして、1バイトは16進数2桁になりますよね。そこで、分かりやすいように、10進数2桁を1桁ずつ分解して考えてみます。52を50+2と考えて、この52を文字、'5'と'2'にする場合は、「50÷10の商の文字」と「2」の文字となります。
それと同じように、16進数2桁を1桁ずつ分解して考えましょう。X'BF'を、各々、X'B0'とX'0F'に分解して、10進数に分解して、上位のX'B0'に該当する数字を16で割り、その商の文字表現とX'0F'の10進数から求まる文字表現から答えが求まります。
具体的にいうと、

10進数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16進数 0 1 2 3 4 5 6 7 8 9 A B C D E F

X'B0'=176÷16=11なので「B」。X'0F'=15=「F」。 配列は、最大16個でいいことになります。

最近、同僚に指摘されて、16で割った商と余りから求める方が、ステップが少なくてすむ事を指摘され、ソースを修正しました。これは、X'BF'=181÷16=11余り15となり、商から、「B」、余りから「F」と分かるわけです。この方が普通の値の求め方ですね。また、1バイトなので、最大X'FF'なので、16で割るのは一回だけで良いわけです。

参考にソースを掲げます。文字「1F」を16進数X'1F'に変換する部分も入っています。


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送