The NATIVE_BINARY data type is used in COBOL for handling native binary data representation that matches the underlying hardware architecture. It is essential for system-level programming, interfacing with other languages, and ensuring precise binary data compatibility.
NATIVE_BINARY ensures data matches the underlying hardware representation.
NATIVE_BINARY fields are declared using the COMP clause with NATIVE_BINARY to ensure native hardware binary representation.
12345678910111213141516* Basic NATIVE_BINARY syntax level-number data-name PIC 9(length) COMP NATIVE_BINARY. * Examples 01 NATIVE-INTEGER PIC 9(9) COMP NATIVE_BINARY. 01 NATIVE-SHORT PIC 9(4) COMP NATIVE_BINARY. 01 NATIVE-LONG PIC 9(10) COMP NATIVE_BINARY. 01 NATIVE-FLOAT PIC 9(6)V99 COMP NATIVE_BINARY. * Complete example 01 NATIVE-DATA-STRUCTURE. 05 NATIVE-ID PIC 9(9) COMP NATIVE_BINARY. 05 NATIVE-COUNT PIC 9(4) COMP NATIVE_BINARY. 05 NATIVE-VALUE PIC 9(8)V99 COMP NATIVE_BINARY. 05 NATIVE-FLAG PIC 9(1) COMP NATIVE_BINARY. 05 NATIVE-TIMESTAMP PIC 9(10) COMP NATIVE_BINARY.
NATIVE_BINARY uses COMP with NATIVE_BINARY for native hardware representation.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152* Complete example using NATIVE_BINARY IDENTIFICATION DIVISION. PROGRAM-ID. NATIVE-BINARY-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 NATIVE-STRUCTURE. 05 NATIVE-INT-VALUE PIC 9(9) COMP NATIVE_BINARY VALUE 12345. 05 NATIVE-SHORT-VALUE PIC 9(4) COMP NATIVE_BINARY VALUE 100. 05 NATIVE-FLOAT-VALUE PIC 9(6)V99 COMP NATIVE_BINARY VALUE 123.45. 05 NATIVE-FLAG-VALUE PIC 9(1) COMP NATIVE_BINARY VALUE 1. 01 STANDARD-STRUCTURE. 05 STANDARD-INT-VALUE PIC 9(9) COMP VALUE 12345. 05 STANDARD-SHORT-VALUE PIC 9(4) COMP VALUE 100. 05 STANDARD-FLOAT-VALUE PIC 9(6)V99 COMP VALUE 123.45. 05 STANDARD-FLAG-VALUE PIC 9(1) COMP VALUE 1. 01 COMPARISON-RESULTS. 05 NATIVE-SIZE PIC 9(4) COMP. 05 STANDARD-SIZE PIC 9(4) COMP. 05 SIZE-DIFFERENCE PIC 9(4) COMP. PROCEDURE DIVISION. MAIN-LOGIC. * Display native binary values DISPLAY "Native Binary Values:" DISPLAY "Integer: " NATIVE-INT-VALUE DISPLAY "Short: " NATIVE-SHORT-VALUE DISPLAY "Float: " NATIVE-FLOAT-VALUE DISPLAY "Flag: " NATIVE-FLAG-VALUE * Compare with standard values DISPLAY "Standard Values:" DISPLAY "Integer: " STANDARD-INT-VALUE DISPLAY "Short: " STANDARD-SHORT-VALUE DISPLAY "Float: " STANDARD-FLOAT-VALUE DISPLAY "Flag: " STANDARD-FLAG-VALUE * Perform arithmetic operations PERFORM ARITHMETIC-OPERATIONS STOP RUN. ARITHMETIC-OPERATIONS. * Add values ADD NATIVE-SHORT-VALUE TO NATIVE-INT-VALUE DISPLAY "After addition: " NATIVE-INT-VALUE * Multiply values MULTIPLY NATIVE-FLOAT-VALUE BY NATIVE-INT-VALUE DISPLAY "After multiplication: " NATIVE-INT-VALUE.
This example shows how to use NATIVE_BINARY for native hardware representation.
1234567891011121314151617181920212223242526272829303132333435363738394041* System API interface using NATIVE_BINARY IDENTIFICATION DIVISION. PROGRAM-ID. SYSTEM-API-INTERFACE. DATA DIVISION. WORKING-STORAGE SECTION. 01 API-PARAMETERS. 05 API-FUNCTION-ID PIC 9(4) COMP NATIVE_BINARY VALUE 1001. 05 API-BUFFER-SIZE PIC 9(4) COMP NATIVE_BINARY VALUE 1024. 05 API-RETURN-CODE PIC 9(4) COMP NATIVE_BINARY. 05 API-ERROR-CODE PIC 9(4) COMP NATIVE_BINARY. 01 API-BUFFER. 05 BUFFER-DATA PIC X(1024). 01 SYSTEM-CALL-PARAMS. 05 CALL-FUNCTION PIC 9(4) COMP NATIVE_BINARY. 05 CALL-PARAM1 PIC 9(9) COMP NATIVE_BINARY. 05 CALL-PARAM2 PIC 9(9) COMP NATIVE_BINARY. 05 CALL-RETURN PIC 9(9) COMP NATIVE_BINARY. PROCEDURE DIVISION. MAIN-LOGIC. * Set up API call parameters MOVE API-FUNCTION-ID TO CALL-FUNCTION MOVE API-BUFFER-SIZE TO CALL-PARAM1 MOVE 0 TO CALL-PARAM2 * Call system API CALL "SYSTEM_API" USING SYSTEM-CALL-PARAMS * Check return code MOVE CALL-RETURN TO API-RETURN-CODE IF API-RETURN-CODE NOT = 0 MOVE CALL-RETURN TO API-ERROR-CODE DISPLAY "API Error: " API-ERROR-CODE ELSE DISPLAY "API call successful" END-IF STOP RUN.
NATIVE_BINARY ensures compatibility with system APIs and external libraries.
NATIVE_BINARY is essential in various scenarios where native hardware representation and system-level programming are required.
12345678910111213141516171819202122232425262728293031323334353637383940414243* C/C++ interfacing with NATIVE_BINARY IDENTIFICATION DIVISION. PROGRAM-ID. C-INTERFACE-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 C-STRUCTURE. 05 C-INT-VALUE PIC 9(9) COMP NATIVE_BINARY. 05 C-SHORT-VALUE PIC 9(4) COMP NATIVE_BINARY. 05 C-FLOAT-VALUE PIC 9(6)V99 COMP NATIVE_BINARY. 05 C-CHAR-ARRAY PIC X(50). 05 C-POINTER-VALUE PIC 9(9) COMP NATIVE_BINARY. 01 C-FUNCTION-PARAMS. 05 FUNC-PARAM1 PIC 9(9) COMP NATIVE_BINARY. 05 FUNC-PARAM2 PIC 9(9) COMP NATIVE_BINARY. 05 FUNC-RETURN PIC 9(9) COMP NATIVE_BINARY. 01 C-STRING-BUFFER PIC X(100). PROCEDURE DIVISION. MAIN-LOGIC. * Initialize C structure MOVE 12345 TO C-INT-VALUE MOVE 100 TO C-SHORT-VALUE MOVE 123.45 TO C-FLOAT-VALUE MOVE "Hello from COBOL" TO C-CHAR-ARRAY MOVE 0 TO C-POINTER-VALUE * Call C function MOVE C-INT-VALUE TO FUNC-PARAM1 MOVE C-SHORT-VALUE TO FUNC-PARAM2 CALL "C_FUNCTION" USING C-STRUCTURE, FUNC-RETURN * Process return value IF FUNC-RETURN = 0 DISPLAY "C function call successful" ELSE DISPLAY "C function call failed" END-IF STOP RUN.
NATIVE_BINARY ensures proper data alignment with C/C++ structures.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960* System programming with NATIVE_BINARY IDENTIFICATION DIVISION. PROGRAM-ID. SYSTEM-PROGRAMMING. DATA DIVISION. WORKING-STORAGE SECTION. 01 SYSTEM-INFO. 05 PROCESS-ID PIC 9(9) COMP NATIVE_BINARY. 05 THREAD-ID PIC 9(9) COMP NATIVE_BINARY. 05 MEMORY-ADDRESS PIC 9(9) COMP NATIVE_BINARY. 05 SYSTEM-TIME PIC 9(10) COMP NATIVE_BINARY. 05 USER-ID PIC 9(4) COMP NATIVE_BINARY. 01 SYSTEM-CALL-STRUCTURE. 05 SYS-CALL-NUMBER PIC 9(4) COMP NATIVE_BINARY. 05 SYS-CALL-PARAM1 PIC 9(9) COMP NATIVE_BINARY. 05 SYS-CALL-PARAM2 PIC 9(9) COMP NATIVE_BINARY. 05 SYS-CALL-PARAM3 PIC 9(9) COMP NATIVE_BINARY. 05 SYS-CALL-RETURN PIC 9(9) COMP NATIVE_BINARY. 01 MEMORY-BUFFER. 05 BUFFER-SIZE PIC 9(4) COMP NATIVE_BINARY VALUE 4096. 05 BUFFER-DATA PIC X(4096). PROCEDURE DIVISION. MAIN-LOGIC. * Get system information PERFORM GET-SYSTEM-INFO * Allocate memory PERFORM ALLOCATE-MEMORY * Perform system operations PERFORM SYSTEM-OPERATIONS STOP RUN. GET-SYSTEM-INFO. * Get process ID MOVE 20 TO SYS-CALL-NUMBER CALL "SYSCALL" USING SYSTEM-CALL-STRUCTURE MOVE SYS-CALL-RETURN TO PROCESS-ID * Get system time MOVE 13 TO SYS-CALL-NUMBER CALL "SYSCALL" USING SYSTEM-CALL-STRUCTURE MOVE SYS-CALL-RETURN TO SYSTEM-TIME. ALLOCATE-MEMORY. * Allocate memory buffer MOVE 9 TO SYS-CALL-NUMBER MOVE 0 TO SYS-CALL-PARAM1 MOVE BUFFER-SIZE TO SYS-CALL-PARAM2 MOVE 3 TO SYS-CALL-PARAM3 CALL "SYSCALL" USING SYSTEM-CALL-STRUCTURE MOVE SYS-CALL-RETURN TO MEMORY-ADDRESS. SYSTEM-OPERATIONS. * Perform system operations here DISPLAY "System operations completed".
System programming requires NATIVE_BINARY for hardware-level operations.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172* Performance optimization with NATIVE_BINARY IDENTIFICATION DIVISION. PROGRAM-ID. PERFORMANCE-OPTIMIZATION. DATA DIVISION. WORKING-STORAGE SECTION. 01 OPTIMIZED-DATA. 05 COUNTER PIC 9(9) COMP NATIVE_BINARY VALUE 0. 05 ARRAY-SIZE PIC 9(4) COMP NATIVE_BINARY VALUE 1000. 05 LOOP-COUNT PIC 9(6) COMP NATIVE_BINARY VALUE 100000. 05 START-TIME PIC 9(10) COMP NATIVE_BINARY. 05 END-TIME PIC 9(10) COMP NATIVE_BINARY. 05 ELAPSED-TIME PIC 9(10) COMP NATIVE_BINARY. 01 DATA-ARRAY. 05 ARRAY-ELEMENT PIC 9(4) COMP NATIVE_BINARY OCCURS 1000 TIMES. 01 STANDARD-DATA. 05 STD-COUNTER PIC 9(9) COMP VALUE 0. 05 STD-ARRAY-SIZE PIC 9(4) COMP VALUE 1000. 05 STD-LOOP-COUNT PIC 9(6) COMP VALUE 100000. 01 STD-ARRAY. 05 STD-ELEMENT PIC 9(4) COMP OCCURS 1000 TIMES. PROCEDURE DIVISION. MAIN-LOGIC. * Performance test with NATIVE_BINARY PERFORM NATIVE-BINARY-TEST * Performance test with standard COMP PERFORM STANDARD-COMP-TEST STOP RUN. NATIVE-BINARY-TEST. * Get start time MOVE FUNCTION CURRENT-DATE TO START-TIME * Perform intensive operations PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > LOOP-COUNT PERFORM PROCESS-NATIVE-ARRAY END-PERFORM * Get end time MOVE FUNCTION CURRENT-DATE TO END-TIME COMPUTE ELAPSED-TIME = END-TIME - START-TIME DISPLAY "Native Binary Time: " ELAPSED-TIME. STANDARD-COMP-TEST. * Get start time MOVE FUNCTION CURRENT-DATE TO START-TIME * Perform intensive operations PERFORM VARYING STD-COUNTER FROM 1 BY 1 UNTIL STD-COUNTER > STD-LOOP-COUNT PERFORM PROCESS-STANDARD-ARRAY END-PERFORM * Get end time MOVE FUNCTION CURRENT-DATE TO END-TIME COMPUTE ELAPSED-TIME = END-TIME - START-TIME DISPLAY "Standard COMP Time: " ELAPSED-TIME. PROCESS-NATIVE-ARRAY. * Process native binary array MOVE COUNTER TO ARRAY-ELEMENT(1). PROCESS-STANDARD-ARRAY. * Process standard array MOVE STD-COUNTER TO STD-ELEMENT(1).
Performance optimization uses NATIVE_BINARY to eliminate conversion overhead.
Following these best practices ensures effective use of NATIVE_BINARY in COBOL applications.
Platform | Considerations | Data Size |
---|---|---|
x86 (32-bit) | Little-endian, 4-byte alignment | int: 4 bytes, long: 4 bytes |
x86-64 (64-bit) | Little-endian, 8-byte alignment | int: 4 bytes, long: 8 bytes |
ARM (32-bit) | Little-endian, 4-byte alignment | int: 4 bytes, long: 4 bytes |
ARM (64-bit) | Little-endian, 8-byte alignment | int: 4 bytes, long: 8 bytes |
PowerPC | Big-endian, 4-byte alignment | int: 4 bytes, long: 4 bytes |
Use Case | NATIVE_BINARY Suitability | Reasoning |
---|---|---|
System APIs | Excellent | Required for system compatibility |
C/C++ interfacing | Excellent | Ensures data structure alignment |
Performance critical | Good | Eliminates conversion overhead |
Business logic | Poor | Use standard COBOL types |
Display data | Poor | Use display-oriented types |
Usage | Syntax | Example |
---|---|---|
Integer | 01 data-name PIC 9(n) COMP NATIVE_BINARY | 01 INT-VAL PIC 9(9) COMP NATIVE_BINARY |
Short integer | 01 data-name PIC 9(n) COMP NATIVE_BINARY | 01 SHORT-VAL PIC 9(4) COMP NATIVE_BINARY |
Long integer | 01 data-name PIC 9(n) COMP NATIVE_BINARY | 01 LONG-VAL PIC 9(10) COMP NATIVE_BINARY |
Float | 01 data-name PIC 9(n)V99 COMP NATIVE_BINARY | 01 FLOAT-VAL PIC 9(6)V99 COMP NATIVE_BINARY |
Pointer | 01 data-name PIC 9(n) COMP NATIVE_BINARY | 01 PTR-VAL PIC 9(9) COMP NATIVE_BINARY |
1. What is the primary purpose of the NATIVE_BINARY data type in COBOL?
2. How does NATIVE_BINARY differ from standard COMP data types?
3. When would you use NATIVE_BINARY in COBOL applications?
4. Which of the following is a common use case for NATIVE_BINARY?
5. How do you declare a NATIVE_BINARY field in COBOL?
Understanding COMP data types in COBOL.
Understanding STANDARD-BINARY data type.
Complete guide to system programming in COBOL.
Understanding COBOL data types and their usage.
Interfacing COBOL with other programming languages.