Binary and Hexadecimal Formats
Data can be read and written in formats used by a number of programming languages such as PL/I, COBOL, FORTRAN, and Assembler. The data can be binary, hexadecimal, or zoned decimal. Formats described in this section can be used both as input formats and output formats, but with fixed data only.
The default output format for all formats described in this section
is an equivalent F
format, allowing the maximum number
of columns for values with symbols and punctuation. To change the
default, use FORMATS
or WRITE FORMATS
.
IBw.d (integer binary):
The IB
format reads fields that contain fixed-point
binary (integer) data. The data might be generated by COBOL using
COMPUTATIONAL data items, by FORTRAN using INTEGER*2 or INTEGER*4,
or by Assembler using fullword and halfword items. The general format
is a signed binary number that is 16 or 32 bits in length.
The general syntax for the IB
format is IBw.d
,
where w
is the field width in bytes (omitted for
column-style specifications) and d
is the number
of digits to the right of the decimal point. Since the width is expressed
in bytes and the number of decimal positions is expressed in digits, d can
be greater than w. For example, both of the following commands
are valid:
DATA LIST FIXED /VAR1 (IB4.8).
DATA LIST FIXED /VAR1 1-4 (IB,8).
Widths of 2 and 4 represent standard 16-bit and 32-bit integers,
respectively. Fields read with the IB
format are
treated as signed. For example, the one-byte binary value 11111111
would be read as –1.
PIBw.d (positive integer binary) :
The PIB
format is essentially the same as IB
except
that negative numbers are not allowed. This restriction allows one
additional bit of magnitude. The same one-byte value 11111111 would
be read as 255.
PIBHEXw (hexadecimal of PIB):
The PIBHEX
format reads hexadecimal numbers as
unsigned integers and writes positive integers as hexadecimal numbers.
The general syntax for the PIBHEX
format is PIBHEXw
,
where w
indicates the total number of hexadecimal
characters. The w
specification must be an even number
with a maximum of 16.
For input data, each hexadecimal number must consist of the exact
number of characters. No signs, decimal points, or leading and trailing
blanks are allowed. For some operating systems (such as IBM CMS),
hexadecimal characters must be upper case. The following example illustrates
the kind of data that the PIBHEX
format can read:
DATA LIST FIXED
/VAR1 1-4 (PIBHEX) VAR2 6-9 (PIBHEX) VAR3 11-14 (PIBHEX).
BEGIN DATA
0001 0002 0003
0004 0005 0006
0007 0008 0009
000A 000B 000C
000D 000E 000F
00F0 0B2C FFFF
END DATA.
LIST.
The values for VAR1, VAR2, and VAR3 are listed
in the figure below. The PIBHEX
format can also be
used to write decimal values as hexadecimal numbers, which may be
useful for programmers.
VAR1 VAR2 VAR3
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
240 2860 65535
Zw.d (zoned decimal):
The Z
format reads data values that contain zoned
decimal data. Such numbers may be generated by COBOL systems using
DISPLAY data items, by PL/I systems using PICTURE data items, or by
Assembler using zoned decimal data items.
In zoned decimal format, one digit is represented by one byte, generally hexadecimal F1 representing 1, F2 representing 2, and so on. The last byte, however, combines the sign for the number with the last digit. In the last byte, hexadecimal A, F, or C assigns +, and B, D, or E assigns –. For example, hexadecimal D1 represents 1 for the last digit and assigns the minus sign (–) to the number.
The general syntax of the Z
format is Zw.d
,
where w
is the total number of bytes (which is the
same as columns) and d
is the number of decimals.
For input data, values can appear anywhere within the column specifications.
Both leading and trailing blanks are allowed. Decimals can be implied
by the input format specification or explicitly coded in the data.
Explicitly coded decimals override the input format specifications.
The following example illustrates how the Z
format
reads zoned decimals in their printed forms on IBM mainframe and PC
systems. The printed form for the sign zone (A to I for +1 to +9,
and so on) may vary from system to system.
DATA LIST FIXED /VAR1 1-5 (Z) VAR2 7-11 (Z,2) VAR3 13-17 (Z)
VAR4 19-23 (Z,2) VAR5 25-29 (Z) VAR6 31-35 (Z,2).
BEGIN DATA
1234A 1234A 1234B 1234B 1234C 1234C
1234D 1234D 1234E 1234E 1234F 1234F
1234G 1234G 1234H 1234H 1234I 1234I
1234J 1234J 1234K 1234K 1234L 1234L
1234M 1234M 1234N 1234N 1234O 1234O
1234P 1234P 1234Q 1234Q 1234R 1234R
1234{ 1234{ 1234} 1234} 1.23M 1.23M
END DATA.
LIST.
The values for VAR1 to VAR6 are listed in the following figure.
VAR1 VAR2 VAR3 VAR4 VAR5 VAR6
12341 123.41 12342 123.42 12343 123.43
12344 123.44 12345 123.45 12346 123.46
12347 123.47 12348 123.48 12349 123.49
-12341 -123.41 -12342 -123.42 -12343 -123.43
-12344 -123.44 -12345 -123.45 -12346 -123.46
-12347 -123.47 -12348 -123.48 -12349 -123.49
12340 123.40 -12340 -123.40 -1 -1.23
The default output format for the Z
format is
the equivalent F
format, as shown in the figure.
The default output width is based on the input width specification
plus one column for the sign and one column for the implied decimal
point (if specified). For example, an input format of Z4.0
generates
an output format of F5.0
, and an input format of Z4.2
generates
an output format of F6.2
.
Pw.d (packed decimal):
The P
format is used to read fields with packed
decimal numbers. Such numbers are generated by COBOL using COMPUTATIONAL–3
data items and by Assembler using packed decimal data items. The general
format of a packed decimal field is two four-bit digits in each byte
of the field except the last. The last byte contains a single digit
in its four leftmost bits and a four-bit sign in its rightmost bits.
If the last four bits are 1111 (hexadecimal F), the value is positive;
if they are 1101 (hexadecimal D), the value is negative. One byte
under the P
format can represent numbers from –9
to 9.
The general syntax of the P
format is Pw.d
,
where w
is the number of bytes (not digits) and d
is
the number of digits to the right of the implied decimal point. The
number of digits in a field is (2*w
–1).
PKw.d (unsigned packed decimal):
The PK
format is essentially the same as P
except
that there is no sign. That is, even the rightmost byte contains two
digits, and negative data cannot be represented. One byte under the PK
format
can represent numbers from 0 to 99. The number of digits in a field
is 2*w
.
RBw (real binary):
The RB
format is used to read data values that
contain internal format floating-point numbers. Such numbers are generated
by COBOL using COMPUTATIONAL–1 or COMPUTATIONAL–2 data items, by PL/I
using FLOATING DECIMAL data items, by FORTRAN using REAL or REAL*8
data items, or by Assembler using floating-point data items.
RB
format is RBw
, where
w
is the total number of bytes. The width specification must be an even number
between 2 and 8. Normally, a width specification of 8 is used to read double-precision values, and a
width of 4 is used to read single-precision values. RBHEXw (hexadecimal of RB):
The RBHEX
format interprets a series of hexadecimal
characters as a number that represents a floating-point number. This
representation is system-specific. If the field width is less than
twice the width of a floating-point number, the value is right-padded
with binary zeros. For some operating systems (for example, IBM CMS),
letters in hexadecimal values must be upper case.
The general syntax of the RBHEX
format is RBHEXw
,
where w
indicates the total number of columns. The
width must be an even number. The values are real (floating-point)
numbers. Leading and trailing blanks are not allowed. Any data values
shorter than the specified input width must be padded with leading
zeros.