二進位和十六進位格式
可以使用許多程式設計語言 (例如 PL/I、COBOL、FORTRAN 及 Assembler) 所使用的格式來讀取及寫入資料。 資料可以是二進位、十六進位或區化十進位。 本節中說明的格式可以同時用作輸入格式和輸出格式,但只能與固定資料搭配使用。
本節中所說明之所有格式的預設輸出格式是相等的 F 格式,容許具有符號及標點符號之值的欄數上限。 若要變更預設值,請使用 FORMATS 或 WRITE FORMATS。
IBw.d (整數二進位):
IB 格式會讀取包含固定點二進位 (整數) 資料的欄位。 資料可能由 COBOL 使用「可計算」資料項目、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。
PIBHEXEC (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 是小數位數。 對於輸入資料,值可以出現在直欄規格內的任何位置。 容許前導及尾端空白。 小數可以由輸入格式規格隱含,或在資料中明確編碼。 明確編碼的十進位數會置換輸入格式規格。
下列範例說明在 IBM 大型主機及 PC 系統上, Z 格式如何在其列印表單中讀取區化十進位。 標誌區 (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 資料項目產生,並由 Assembler 使用聚集十進位資料項目產生。 聚集十進位欄位的一般格式在欄位的每個位元組中是兩個四位元數字,但最後一個除外。 最後一個位元組在其最左側的四個位元中包含一個位數,在其最右側的位元中包含一個四位元符號。 如果最後四個位元是 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 使用 FLOATING DECIMAL 資料項目、FORTRAN 使用 REAL 或 REAL*8 資料項目,或組譯器使用浮點資料項目,會產生這類數字。
RB 格式的一般語法是 RBw,其中 w 是位元組總數。 寬度規格必須是介於 2 和 8 之間的偶數。 通常,寬度規格 8 用於讀取倍精準度值,寬度 4 用於讀取單精準度值。RBHEXw (RB 的十六進位):
RBHEX 格式會將一系列十六進位字元解譯為代表浮點數字的數字。 此表示法是系統特有的。 如果欄位寬度小於浮點數字寬度的兩倍,則值會以二進位零向右填補。 對於部分作業系統 (例如, IBM CMS) ,十六進位值中的字母必須是大寫。
RBHEX 格式的一般語法是 RBHEXw,其中 w 指出直欄總數。 寬度必須是偶數。 值是實數 (浮點數)。 不容許前導及尾端空白。 任何短於指定輸入寬度的資料值都必須以前導零填補。