HEXBYT - 10 進数を文字に変換

HEXBYT 関数は、10 進数の整数に対応する ASCII または Unicode のいずれかの文字を取得します。取得される文字は、構成およびオペレーティングシステムにより異なります。指定する 10 進数は、構成されたコードページの文字に関連する値にする必要があります。HEXBYT 関数は、ASCII、Unicode 文字セットのいずれかで、単一文字を返します。この関数を使用することにより、CTRAN 関数と同様、使用するキーボードにはない文字を生成することができます。

Unicode 構成の場合、この関数は次の範囲の値を使用します。

  • 1 バイト文字 - 0 (ゼロ) から 255
  • 2 バイト文字 - 256 から 65535
  • 3 バイト文字 - 65536 から 16777215
  • 4 バイト文字 - 16777216 から 4294967295

特殊文字の表示は、ソフトウェアとハードウェアにより異なります。特殊文字には表示されないものがあります。出力可能な ASCII および EBCDIC 文字とそれぞれの整数値についての詳細は、ASCII 文字コード表を参照してください。

10 進数を文字に変換

HEXBYT(decimal_value, output)

説明

decimal_value

整数

文字に変換される 10 進数です。Unicode 以外の環境では、255 より大きい値は、decimal_value の値を 256 で除算した剰余として扱われます。指定する 10 進数は、構成されたコードページの文字に関連する値にする必要があります。

output

文字

結果を格納するフィールド名、または出力フォーマットです。フォーマットは一重引用符 (') で囲みます。

10 進数を ASCII および Unicode の文字に変換

次のリクエストは、HEXBYT 関数を使用し、10進数の整数値「130」を ASCII コードページ 1252 のカンマ (,) に変換します。次にカンマ (,) は、LAST_NAME と FIRST_NAME の連結に使用され、NAME フィールドが生成されます。

TABLE FILE EMPLOYEE
PRINT LAST_NAME AND
COMPUTE COMMA1/A1 = HEXBYT(130, COMMA1); NOPRINT
COMPUTE NAME/A40 = LAST_NAME || COMMA1| ' '| FIRST_NAME;
BY LAST_NAME NOPRINT
BY FIRST_NAME
WHERE DEPARTMENT EQ 'MIS';
ON TABLE SET PAGE NOLEAD
ON TABLE SET STYLE *
GRID=OFF,$
ENDSTYLE
END

下図は、出力結果を示しています。

コードページ 65001 を使用するよう構成された Unicode 環境でこれと同じ出力結果を生成するには、COMMA1 フィールドの COMPUTE コマンドを次の構文で置換します。この場合、HEXBYT 関数の呼び出しによって、整数値「14844058」がカンマ (,) に変換されます。

COMPUTE COMMA1/A1 = HEXBYT(14844058, COMMA1); NOPRINT

10 進数を文字に変換

HEXBYT 関数は、LAST_INIT_CODE を対応する文字に変換し、結果を LAST_INIT に格納します。

TABLE FILE EMPLOYEE
PRINT LAST_NAME AND
COMPUTE LAST_INIT_CODE/I3 = BYTVAL(LAST_NAME, 'I3');
COMPUTE LAST_INIT/A1 = HEXBYT(LAST_INIT_CODE, LAST_INIT);
WHERE DEPARTMENT EQ 'MIS';
END

ASCII プラットフォームの出力結果は次のとおりです。

LAST_NAME LAST_INIT_CODE LAST_INIT 
--------- -------------- --------- 
SMITH                 83 S 
JONES                 74 J 
MCCOY                 77 M 
BLACKWOOD             66 B 
GREENSPAN             71 G 
CROSS                 67 C

メインフレーム環境での中括弧の挿入

HEXBYT は、10 進数の整数 192 を対応する EBCDIC 文字の左中括弧 ({) に、208 を対応する右中括弧 (}) にそれぞれ変換します。CURR_SAL の値が 12000 より小さい場合、LAST_NAME は中括弧 ({}) で囲まれます。

DEFINE FILE EMPLOYEE
BRACE/A17 = HEXBYT(192, 'A1') | LAST_NAME | HEXBYT(208, 'A1');
BNAME/A17 = IF CURR_SAL LT 12000 THEN BRACE
ELSE LAST_NAME;
END
TABLE FILE EMPLOYEE
PRINT BNAME CURR_SAL BY EMP_ID
END

出力結果は次のとおりです。

EMP_ID     BNAME                          CURR_SAL 
------     -----                          -------- 
071382660  {STEVENS        }            $11,000.00 
112847612  SMITH                        $13,200.00 
117593129  JONES                        $18,480.00 
119265415  {SMITH          }             $9,500.00 
119329144  BANNING                      $29,700.00 
123764317  IRVING                       $26,862.00 
126724188  ROMANS                       $21,120.00 
219984371  MCCOY                        $18,480.00 
326179357  BLACKWOOD                    $21,780.00 
451123478  MCKNIGHT                     $16,100.00 
543729165  {GREENSPAN      }             $9,000.00 
818692173  CROSS                        $27,062.00