загрузка...

Флаги


Прежде чем переходить к реальным структурам данных, я хотел бы обсудить еще один тип данных — флаги. Некоторые данные всего лишь показывают, выполняется или не выполняется некоторое условие: скажем, является ли раздел загрузочным или нет. Значения таких данных представляются одной двоичной цифрой (1 или 0). Конечно, для этой информации можно выделить целый байт, в котором сохраняется значение 0 или 1. Однако такой способ крайне неэффективен: из 8 выделенных битов реально используется всего один. Более эффективный способ основан на упаковке нескольких двоичных условий в одно значение, каждый бит которого соответствует некоторому признаку или условию. Такие биты часто называются флагами (flags). Чтобы получить значение флага, необходимо преобразовать число в двоичную форму и проанализировать нужный бит. Если бит равен 1, значит, флаг установлен.
Давайте рассмотрим практический пример и преобразуем структуру данных с почтовым адресом в нечто более сложное. Исходная структура содержала два поля данных: для номера дома и названия улицы. В новой версии в нее добавляется необязательное 16-байтовое название города, следующее за названием улицы. Так как имя города не является обязательным, необходимо добавить флаг, указывающий на его наличие или отсутствие. Флаг хранится в байте 31; если запись содержит название города, бит 0 устанавливается (то есть 0000 0001). Если название города присутствует, структура данных содержит 48 байт вместо 32. Новая структура данных приведена в табл. 2.4.

Таблица 2.4. Структура данных со значением флага

Диапазон байтов

Описание

0-1

Номер дома (2 байта)

2-30

Название улицы в кодировке ASCII (29 байт)

31-31

Флаги

32-47

Название города в кодировке ASCII (16 байт) — если флаг установлен


Пример данных, записанных на диск с использованием этой структуры:
00000000: 0100 4d61 696е 2053 742е 0000 0000 0000 ..Main St
00000016: 0000 0000 0000 0000 0000 0000 0000 0061                            а
00000032: 426f              7374              6f6e              0000              0000              0000              0000 0000              Boston
00000032: 1900              536f              7574              6820              5374              2e00              0000 0000              ..South              St
00000064: 0000              0000              0000              0000              0000              0000              0000 0000
Первая строка              выглядит точно так же, как в предыдущем примере.
Флагу в бай
те 31 присвоено значение 0x61. Размер флага составляет всего 1 байт, поэтому беспокоиться о порядке байтов не нужно. Значение необходимо преобразовать в двоичную систему; по табл. 2.1 значения 0x6 и 0x1 заменяются двоичным значением 0110 0001. Младший бит, то есть флаг города, установлен. В остальных битах содержатся значения других флагов — скажем, признак юридического адреса. На основании значения флага известно, что в байтах 32-47 хранится название города («Boston»). Следующая структура данных начинается с байта 48, а ее поле флагов хранится в байте 79. Значение равно 0x60, флаг города не установлен. Следовательно, третья структура данных начинается с байта 80.
Флаги часто встречаются в структурах данных файловых систем. Обычно они показывают, какие возможности активны, какие разрешения предоставлены пользователю, находится ли файловая система в «чистом» состоянии и т. д. 
<< | >>
Источник: Кэрриэ Б.. Криминалистический анализ файловых систем. 2007

Еще по теме Флаги:

  1. Модель «Бычий флаг»
  2. Стандартные атрибуты файлов
  3. 1.2.4. Советский период развития отечественной педагогики
  4. 1. Государственно-правовое устройство объединенной Германии
  5. Крах Второй германской империи. Веймарская конституция 1919 г.
  6. Споры об исторической роли Б.Н. Ельцина
  7. Категория имен файлов
  8. Глава 47
  9. «Эффект попутчиков в последнюю минуту»
  10. Общий обзор
  11. 5.4. Стоимость воспроизводства и плата за природные ресурсы
  12. 5.3. Сравнительная экономическая оценка природных ресурсов
  13. 5.2. Абсолютная и экономическая оценки
  14. 5. ЭКОНОМИЧЕСКАЯ ОЦЕНКА ПРИРОДНЫХ РЕСУРСОВ
  15. 5.1. Содержание экономической оценки
  16. 4.3. Основные направления научно-технического прогресса и их влияние на охрану окружающей среды и рациональное природопользование
  17. 4.2. Оценка ущерба от загрязнения окружающей среды
  18. 4. ПРИРОДОПОЛЬЗОВАНИЕ И НАУЧНО-ТЕХНИЧЕСКИЙ ПРОГРЕСС