binary

Команда вставляет и извлекает поля из двоичных строк.

      binary format formatString ?arg arg...?
      binary scan string formatString ?varName varName...?
    

ОПИСАНИЕ

Команда binary предоставляет средства для манипулирования двоичными данными. Первая из форм команды конвертирует обычные Tcl-значения arg в двоичное число. Например, вызванная с аргументами 16 и 22, она вернет 8-байтовое двоичную строку, состоящую из двух 4-байтовых чисел, представляющих соответственно 16 и 22. Вторая форма команды выполняет обратное действие, она извлекает из двоичной строки данные и возвращает их как обычные Tcl строки.

binary format

Команда binary format создает двоичную строку по правилам, заданным с помощью шаблона formatString. Содержание этой строки задается дополнительными аргументами arg. Команда возвращает сформированную двоичную строку.

Шаблон formatString содержит последовательность из нуля или более спецификаторов преобразования, разделенных одним или более пробелами. Каждый спецификатор преобразования состоит из буквы, за которой может следовать число count. Как правило, спецификатор использует один из аргументов arg чтобы получить величину для форматирования. Буква в спецификаторе указывает тип преобразования (форматирования). Число count обычно указывает сколько объектов для форматирования выбирается из значения arg. Соответственно, count должно быть неотрицательным десятичным числом. Если значение count равно *, это обычно указывает, что надо использовать все значение аргумента. Если число аргументов arg не соответствует числу спецификаторов, требующих для себя дополнительного аргумента, выдается ошибка.

Обычно результат каждого нового преобразования дописывается в конец возвращаемой строки. Однако, с помощью специальных спецификаторов точку ввода нового значения (курсор) можно передвигать по формируемой строке.

Ниже приведены допустимые значения спецификаторов преобразований и описаны соответствующие преобразования.

a ?count?

Передает в выходную строку count символов из соответствующего аргумента arg. Если в arg содержится меньше count байт, добавляются нулевые байты. Если в arg содержится больше count байт, "лишние" байты игнорируются. Если count равно *, используются все байты из arg. Если count отсутствует, используется один байт. Например, команда

	      binary format a7a*a alpha bravo charlie
	    

вернет строку, эквивалентную alpha\000\000bravoc.

A ?count?

То же, что и a, за исключением того, что для заполнения используются не нулевые байты, а пробелы. Например, команда

	      binary format A6A*A alpha bravo charlie
	    

вернет alpha bravoc.

b ?count?

Передает в выходную строку count бит в порядке от младших к старшим в каждом байте. Аргумент arg должен состоять из последовательности нулей и единиц. Порядок байтов в выходной строке тот же, что и во входной информации. Лишние биты отсекаются, недостающие дополняются нулями. По умолчанию форматируется один бит. Если число форматируемых битов не соответствует целому числу байтов, недостающие биты дополняются нулями.