| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > работа с двоичными последовательностями |
| Автор: Aleksandor 8.12.2005, 12:46 | ||
| Уважаемые знатоки! У меня такие вопросы 1. что означает такая конструкция в переводе на русский- my (@buf, $buff) (это не по теме, просто интересно) Дальше собственно сабж... 2. как выделить первые 4 байта в виде отдельной переменной из последовательности длиной 36 байт? и 3. - вопрос в коде (как заменить первые 4 байта в переменной $buff длиной 36 байт)
Вопрос 4 - имеются 9 двоичных переменных, каждая длиной 4 байта. как их упаковать для записи в массив в виде непрерывной последовательности из 36 байт? my $bin_a=pack("H8",$params[0]); my $bin_m1=pack("H8",$params[2]); my $bin_m2=pack("H8",$params[3]); my $bin_m3=pack("H8",$params[4]); my $bin_m4=pack("H8",$params[5]); my $bin_m5=pack("H8",$params[6]); my $bin_m6=pack("H8",$params[7]); my $bin_m7=pack("H8",$params[8]); my $bin_m8=pack("H8",$params[9]); # как все эти переменные упаковать в $buff ??? push(@buf, $buff); # записываем в массив |
| Автор: Aleksandor 8.12.2005, 20:47 | ||||
| Кажется немного разобрался сам для упаковки строковых переменных такая конструкция-
Для распаковки двоичной последовательности
Добавление нового значения в конец массива push(@buf, @longwords); Сохранение в файле print FH for @buf; Прошу прояснить если в чем не прав и что здесь можно оптимизировать для повышения быстродействия. |
| Автор: sharq 9.12.2005, 17:19 |
| Aleksandor например, использовать не массив, а ссылку на массив. |
| Автор: Aleksandor 9.12.2005, 17:30 | ||
Sharq, а где конкретно? И что это дает? А в остальном (push (@buf,@filelongwords);=- массив в массив Хочется чтоб было красиво, но Perl толком не знаю А как понять еще вот такое выражение my (@buf, $buff) ??? |
| Автор: korob2001 9.12.2005, 20:50 |
| Посмотри эту тему, там несколько рабочих примеров работы с бинарными файлами. Так же есть коментарии. http://forum.vingrad.ru/index.php?showtopic=71224 |
| Автор: Aleksandor 9.12.2005, 21:45 |
| А так это я и был Сейчас решил к единственной переменной длиной 4 байт добавить еще ключ длиной 32 байта. Таким образом эти 36 байт составляют одну "запись" или "строку" в файле. Не уверен что можно иметь массив с переменными разной размерности, поэтому разбиваю эти 36 байт на 9 переменных одинакового типа. Первая переменная используется для сравнения (поиска) в массиве и иногда для подстановки. К сожалению не нашел способа выделить двоичные данные не преобразуя их в строковые значения |
| Автор: korob2001 10.12.2005, 12:18 | ||||
Это равносильно следующему.
В обоих случаях объявляются массив @buf и скаляр $buff. Ну вот собственно и всё. |
| Автор: sharq 10.12.2005, 12:43 | ||||||||||||
Продолжаю эквивалентность
Aleksandor 1. Если весь массив @params, то
Если, только 9 первых элементов, то
2.
ВОт посмотри, потестируй, поэкспериментируй. Только не забывай про
Они научат тебя писать скрипты на perl правильно. Почитай книги по perl, здесь уже ни раз обсуждалось какие и где взять. |