%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.