二进制和十六进制格式
数据可以由许多编程语言 (例如 PL/I , COBOL , FORTRAN 和汇编程序) 使用的格式进行读写。 数据可以是二进制,十六进制或分区十进制。 本节中描述的格式可同时用作输入格式和输出格式,但仅用于固定数据。
本节中描述的所有格式的缺省输出格式都是等效的 F 格式,允许具有符号和标点的值的最大列数。 要更改缺省值,请使用 FORMATS 或 WRITE FORMATS。
IBw.d (整数二进制):
IB 格式读取包含定点二进制 (整数) 数据的字段。 数据可以由 COBOL 使用COMPU滑数据项生成,由 FORTRAN 使用 INTEGER*2 或 INTEGER*4生成,也可以由汇编程序使用全字和半字项生成。 一般格式是长度为 16 位或 32 位的有符号二进制数。
IB 格式的常规语法为 IBw.d,其中 w 是以字节为单位的字段宽度 (对于列样式规范省略) , d 是小数点右边的位数。 由于宽度以字节表示,而小数位数以数字表示,因此 d 可以大于 w。 例如,以下两个命令都有效:
DATA LIST FIXED /VAR1 (IB4.8).
DATA LIST FIXED /VAR1 1-4 (IB,8).
2 和 4 的宽度分别表示标准 16 位和 32 位整数。 使用 IB 格式读取的字段将被视为已签名。 例如,单字节二进制值 11111111 将被读取为 -1。
PIBw.d (正整数二进制) :
PIB 格式与 IB 基本相同,但不允许使用负数。 此限制允许一个额外的位量级。 相同的单字节值 11111111 将被读取为 255。
PIBHEXw (PIB 的十六进制):
PIBHEX 格式将十六进制数字作为无符号整数读取,并将正整数作为十六进制数字写入。 PIBHEX 格式的一般语法为 PIBHEXw,其中 w 指示十六进制字符的总数。 w 规范必须是最大为 16 的偶数。
对于输入数据,每个十六进制数字必须由精确的字符数组成。 不允许使用符号,小数点或前导空格和尾部空格。 对于某些操作系统 (例如 IBM CMS) ,十六进制字符必须为大写。 以下示例说明了 PIBHEX 格式可以读取的数据类型:
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.
下图中列出了 VAR1, VAR2和 VAR3 的值。 PIBHEX 格式还可用于将十进制值作为十六进制数字写入,这对于程序员可能很有用。
VAR1 VAR2 VAR3
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
240 2860 65535
Zw.d (分区十进制):
Z 格式读取包含分区十进制数据的数据值。 这些数字可以由使用 DISPLAY 数据项的 COBOL 系统,使用 PICTURE 数据项的 PL/I 系统或使用分区十进制数据项的汇编程序生成。
在分区十进制格式中,一个数字由一个字节表示,通常是十六进制 F1 表示 1 , F2 表示 2 等。 但是,最后一个字节将数字的符号与最后一个数字组合在一起。 在最后一个字节中,十六进制 A , F 或 C 赋值 + ,以及 B , D 或 E 赋值-。例如,十六进制 D1 表示最后一个数字的 1 ,并对数字赋值减号 (-)。
Z 格式的一般语法为 Zw.d,其中 w 是字节总数 (与列相同) , d 是小数位数。 对于输入数据,值可以出现在列规范中的任何位置。 同时允许前导空格和尾部空格。 小数可以由输入格式规范默示,也可以在数据中显式编码。 显式编码的小数将覆盖输入格式规范。
以下示例说明了 Z 格式如何在 IBM 大型机和 PC 系统上读取其打印格式的分区小数。 符号区域的打印表单 (A 到 I 表示 + 1 到 + 9 ,依此类推) 可能因系统而异。
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.
下图中列出了 VAR1 到 VAR6 的值。
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
Z 格式的缺省输出格式为等效的 F 格式,如图所示。 缺省输出宽度基于输入宽度规范以及符号的一列和隐含小数点的一列 (如果指定)。 例如,输入格式 Z4.0 生成输出格式 F5.0,输入格式 Z4.2 生成输出格式 F6.2。
Pw.d (压缩十进制):
P 格式用于读取具有压缩十进制数的字段。 此类数字由 COBOL 使用 COMPUTATIONAL–3 数据项生成,并由汇编程序使用压缩十进制数据项生成。 压缩十进制字段的一般格式是字段的每个字节 (最后一个字节除外) 中的两个四位数字。 最后一个字节在它的四个最左边的位中包含一个数字,在它的最右边的位中包含一个四位符号。 如果最后四个位是 1111 (十六进制 F) ,那么值为正数; 如果它们是 1101 (十六进制 D) ,那么值为负数。 P 格式下的一个字节可以表示从 -9 到 9 的数字。
P 格式的一般语法为 Pw.d,其中 w 是字节数 (不是数字) , d 是隐式小数点右边的位数。 字段中的位数为 (2 *w-1)。
PKw.d (无符号压缩十进制):
PK 格式与 P 基本相同,只是没有符号。 即,即使最右边的字节包含两位数,也不能表示负数据。 PK 格式下的一个字节可以表示从 0 到 99 的数字。 字段中的位数为 2 *w。
RBw (实二进制):
RB 格式用于读取包含内部格式浮点数的数据值。 此类数字由 COBOL 使用 COMPUTATIONAL–1 或 COMPUTATIONAL–2 数据项生成,由 PL/I 使用 FLODECIMAL 数据项生成,由 FORTRAN 使用 REAL 或 REAL*8 数据项生成,或由汇编程序使用浮点数据项生成。
RB 格式的常规语法为 RBw,其中 w 是字节总数。 宽度规范必须是介于 2 和 8 之间的偶数。 通常,宽度规范 8 用于读取双精度值,宽度 4 用于读取单精度值。RBHEXw (RB 的十六进制):
RBHEX 格式将一系列十六进制字符解释为表示浮点数的数字。 此表示特定于系统。 如果字段宽度小于浮点数宽度的两倍,那么将使用二进制零向右填充该值。 对于某些操作系统 (例如, IBM CMS) ,十六进制值中的字母必须为大写。
RBHEX 格式的常规语法为 RBHEXw,其中 w 指示列总数。 宽度必须是偶数。 值为实数 (浮点数)。 不允许使用前导和尾部空格。 任何短于指定输入宽度的数据值都必须以前导零填充。