The RM/COBOL system represents COMP (or COMPUTATIONAL) data in packed decimal format with one character per byte stored in each least significant four bits. The most significant half-byte always contains zero. If the picture string specifies a signed representation, an additional byte is added to the least significant end of the string: a negative value is represented by the hexadecimal value x"D", and a positive value is represented by the hexadecimal value x"B".
Consider the following examples:
Value | Picture Clause | RM Representation (Hexadecimal) |
---|---|---|
1234 | PIC 9(5) COMP | 00 01 02 03 04 |
1234 | PIC S9(5) COMP | 00 01 02 03 04 0B |
-1234 | PIC S9(5) COMP | 00 01 02 03 04 0D |
You should converts COMP data fields into DISPLAY format, with sign trailing separate. This is compatible with this COBOL system's treatment of RM/COBOL COMP fields in the source program when the RM directive is set. If the data item is signed, the sign byte has the most significant half-byte set to hexadecimal value 2.
After conversion, the examples above are represented as follows:
Value | Picture Clause | This COBOL's Representation (Hexadecimal) |
---|---|---|
1234 | PIC 9(5) DISPLAY | 30 31 32 33 34 |
1234 | PIC S9(5) DISPLAY | 30 31 32 33 34 2B |
-1234 | PIC S9(5) DISPLAY | 30 31 32 33 34 2D |