Практикум по среде и языку QBasic 157
ловку файла, а второе — к заголовку кодовой страницы. На экране также видно, что начиная со второй строки группы кодов разделены пробелами, притом во второй и третьей строках размещаются по 5 групп. Такая периодичность может соответствовать кодированию каждого символа 16 байтами (фонт размером 8Х16). Для проверки этой гипотезы вы можете попытаться расшифровать коды четвертой группы во второй строке, включающей в себя два треугольных символа, две цифры 8, две вертикальные черты и маленький квадрат. Последовательность шестнадцате-ричных кодов, соответствующих этим символам: 10, 38, 7С, FE, 7C, 38, 10. Напишите двоичные коды в 7 строках таким образом, чтобы соответст-вую1цие разряды находились на одной и той же вертикали, и вы увидите, что единички образуют растровое изображение бубновой карточной масти. А это как раз и есть символ с номером 4.
Поскольку команде TYPE не удается продвинуться дальше символа с кодом 26, для дальнейшего чтения составим программу вывода нескольких десятков кодов из самого начала файла:
CLS 'очистка экрана DIM byte AS STRING*! 'определение байта OPEN "C:\dos\ega3.cpi" FOR BINARY AS #1 'открытие файла FOR 1% = 1 ТО 257 'цикл чтения 257 байтов GET #1, 1%, b% 'чтение очередного байта PRINT USING "####"; ASC(byte); 'вывод кода IF 1% MOD 16 = 1 THEN PRINT
'переход на следующую строку NEXT 1% 'конец цикла CLOSE #1 'закрытие файла
В этой программе для чтения символов введена байтовая переменная, определяемая как строка единичной длины. Файл открыт как двоичный для того, чтобы обеспечить доступ к любому байту. Чтение символов осуществляется процедурой GET в цикле по счетчику. Формат вывода организован таким образом, чтобы можно было легко определить порядковый номер байта в файле по расположению его десятичного кода на экране. В воспроизведенном ниже примере вывода на экран коды явно текстовых частей информации заменены на буквы.
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
F |
0 |
N |
Т |
32 |
32 |
32 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
23 |
о |
0 |
0 |
5 |
0 |
28 |
0 |
77 |
38 |
0 |
0 |
1 |
0 |
Е |
G |
А |
32 |
32 |
32 |
32 |
32 |
181 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
5 |
0 |
0 |
0 |
1 |
0 |
3 |
0 |
18 |
38 |
16 |
В |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
126 |
129 |
165 |
129 |
129 |
189 |
153 |
129 |
129 |
126 |
0 |
0 |
0 |
0 |
0 |
0 |
126 |
255 |
219 |
255 |
255 |
195 |
231 |
255 |
255 |
126 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
108 |
254 |
254 |
254 |
254 |
124 |
56 |
16 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
16 |
56 |
124 |
254 |
124 |
56 |
16 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
24 |
60 |
60 |
231 |
231 |
231 |
24 |
24 |
60 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
24 |
60 |
126 |
255 |
255 |
126 |
•24 |
24 |
60 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
24 |
60 |
60 |
24 |
0 |
0 |
0 |
0 |
0 |
0 |
255 |
255 |
255 |
255 |
255 |
255 |
231 |
195 |
195 |
231 |
255 |
255 |
255 |
255 |
255 |
255 |
0 |
0 |
0 |
0 |
0 |
60 |
102 |
66 |
66 |
102 |
60 |
0 |
0 |
0 |
0 |
0 |
255 |
255 |
255 |
255 |
255 |
195 |
153 |
189 |
189 |
153 |
195 |
255 |
255 |
255 |
255 |
255 |
0 |
0 |
30 |
14 |
26 |
50 |
120 |
204 |
204 |
204 |
204 |
120 |
0 |
0 |
0 |
0 |