%BINARY 內建函數
二進位內建函數 (%BINARY 或 %BIN) 會將指定 CL 字元變數的內容解譯為帶正負號的二進位整數。
起始位置從指定的位置開始,並持續 2 或 4 個字元的長度。
下列範例顯示二進位內建函數的語法:
%BINARY(character-variable-name starting-position length)
您也可以撰寫它的程式碼,如下列範例所示:
%BIN(character-variable-name starting-position length)
起始位置和長度是選用的。 然而,如果未指定起始位置及長度,則會使用起始位置 1 及所指定字元變數的長度。 在這種情況下,您必須將字元變數的長度宣告為 2 或 4。
如果指定起始位置,您也必須指定 2 或 4 的常數長度。 起始位置必須是等於或大於 1 的正數。 如果起始位置和長度的總和大於字元變數的長度,則會發生錯誤。 (CL 十進位或整數變數也可以用於起始位置。)
您可以將二進位內建函數與 If (IF) 及 Change Variable (CHGVAR) 指令一起使用。 它可以單獨使用,也可以作為算術或邏輯表示式的一部分使用。 您也可以在定義為具有 EXPR (*YES) 之數值 (TYPE 為 *DEC、 *INT2、 *INT4、 *UINT2或 *UINT4) 的任何指令參數上使用二進位內建函數。
當二進位內建函數與 IF 指令上的 condition (COND) 參數或 Change Variable (CHGVAR) 指令上的 VALUE 參數一起使用時,字元變數的內容會解譯為二進位至十進位轉換。
當二進位內建函數與 Change Variable (CHGVAR) 指令上的 VAR 參數一起使用時, VALUE 參數中的十進位值會轉換為 2 位元組或 4 位元組帶正負號的二進位整數,以及儲存在指定起始位置之字元變數中的結果。 小數分數被截斷。
系統在 Call Bound Procedure (CALLPRC) 指令的 RTNVAL 參數上使用二進位內建函數,以指出呼叫程序預期被呼叫的程序會傳回帶正負號的二進位整數。
2 位元組字元變數可以保留 -32 768 到 32 767 之間的帶正負號二進位整數值。 4 位元組字元變數可以保留 -2 147 483 648 到 2 147 483 647 之間的帶正負號二進位整數值。
下列範例是關於二進位內建函數:
DCL VAR(&B2) TYPE(*CHAR) LEN(2) VALUE(X'001C') DCL VAR(&N) TYPE(*DEC) LEN(3 0) CHGVAR &N %BINARY(&B2)
變數 &B2 的內容會被視為 2 位元組帶正負號的二進位整數,並轉換成相當於 28 的十進位。 It is then assigned to the decimal variable &N.
DCL VAR(&N) TYPE(*DEC) LEN(5 0) VALUE(107) DCL VAR(&B4) TYPE(*CHAR) LEN(4) CHGVAR %BIN(&B4) &N
The value of the decimal variable &N is converted to a 4-byte signed binary number and is placed in character variable &B4. 變數 &B4 將具有 X'0000006B'的值。
DCL VAR(&P) TYPE(*CHAR) LEN(100) DCL VAR(&L) TYPE(*DEC) LEN(5 0) CHGVAR &L VALUE(%BIN(&P 1 2) * 5)
The first two characters of variable &P is treated as a signed binary integer, converted to its decimal equivalent, and multiplied by 5. The product is assigned to the decimal variable &L.
DCL VAR(&X) TYPE(*CHAR) LEN(50) CHGVAR %BINARY(&X 15 2) VALUE(122.56)
The number 122.56 is truncated to the whole number 122 and is then converted to a 2-byte signed binary integer and is placed at positions 15 and 16 of the character variable &X. Positions 15 and 16 of variable &X will contain the hexadecimal equivalent of X'007A'.
DCL VAR(&B4) TYPE(*CHAR) LEN(4) CHGVAR %BIN(&B4) VALUE(-57)
值 -57 會轉換為 4 位元組帶正負號的二進位整數,並指派給字元變數 &B4。 然後變數 &B4 將包含值 X'FFFFFFC7'。
DCL VAR(&B2) TYPE(*CHAR) LEN(2) VALUE(X'FF1B') DCL VAR(&C5) TYPE(*CHAR) LEN(5) CHGVAR &C5 %BINARY(&B2)
變數 &B2 的內容被視為 2 個位元組帶正負號的二進位整數,並轉換為其十進位對等項目 -229。 數字會轉換為字元格式,並儲存在變數字元 &C5中。 然後,字元變數 &C5 將包含值 '-0229'。
DCL VAR(&C5) TYPE(*CHAR) LEN(5) VALUE(' 1253') DCL VAR(&B2) TYPE(*CHAR) LEN(2) CHGVAR %BINARY(&B2) VALUE(&C5)
字元變數 &C5 中的字元號碼 1253 會轉換為十進位數。 然後,十進位數 1253 會轉換為 2 位元組帶正負號的二進位整數,並儲存在變數 &B2中。 然後變數 &B2 將具有值 X'04E5'。
DCL VAR(&S) TYPE(*CHAR) LEN(100) IF (%BIN(&S 1 2) *GT 10) THEN( SNDPGMMSG MSG('Too many in list.') )
The first 2 bytes of the character variable &S are treated as a signed binary integer when compared to the number 10. 如果二進位數字的值大於 10 ,則會執行 Send Program Message (SNDPGMMSG) 指令。
DCL VAR(&RTNV) TYPE(*CHAR) LEN(4) CALLPRC PRC(PROCA) RTNVAL(%BIN(&RTNV 1 4))
Procedure PROCA returns a 4-byte integer which is stored in variable &RTNV.