Forum Webscript.Ru

Программирование => Perl => Тема начата: Unregistered от 26 Июля 2002, 13:38:38

Название: Двоичные файлы
Отправлено: Unregistered от 26 Июля 2002, 13:38:38
Всем привет!
Народ подскажите, как в перле писать двоичные файлы, чтоб их содержимое с легкостью могла проанализировать С-программа? Про функцию binmode знаю, но она не работает почему-то, т.е. пишу число 4325345, оно записывается как текст, а нужно в двоичном виде.
И второй вопрос, как узнать сколько байт записывается?
Как записать конкретное число байт?
Спасибо.
Название: Двоичные файлы
Отправлено: C++ от 26 Июля 2002, 13:51:06
Всем привет!
Народ подскажите, как в перле писать двоичные файлы, чтоб их содержимое с легкостью могла проанализировать С-программа? Про функцию binmode знаю, но она не работает почему-то, т.е. пишу число 4325345, оно записывается как текст, а нужно в двоичном виде.
И второй вопрос, как узнать сколько байт записывается?
Как записать конкретное число байт?
Спасибо.
З.Ы. А почему меня в игнор лист занесли?
Название: Двоичные файлы
Отправлено: glebushka от 26 Июля 2002, 22:46:37
Насколько я помню 1байт = 1 символ, дык организуй простеший цикл:
my $i;
my $bayt=300;#количество байт
my $symbol="1";#сивол, символизирующий один байт:-)
open FILE, "> file.txt";
if ($i<=$bayt){
print FILE $symbol;
$i++;}
close(FILE);
Цитировать
А почему меня в игнор лист занесли?

Видимо унрегистров выживают с форума:-), так что включи куки или запомни пароль:-).
Название: Двоичные файлы
Отправлено: Serchey от 26 Июля 2002, 23:51:40
C++
Поищи в доках sysopen,sysread,syswrite.
Название: Двоичные файлы
Отправлено: КшЫуфксрук от 27 Июля 2002, 02:18:42
binmode всего лишь говорит Перлу, что символ конца строки нужно писать и читать как есть, без изменений. Для записи бинарных данных прочитай про pack/unpack. Например:

$num=453245;
print OUT pack("N",$num);

запишет ровно 4 байта (если OUT был в binmode открыт). У функции pack есть множество форматов записи чисел, выбери тот, который затем можно легко в Си распознать.
Название: Двоичные файлы
Отправлено: C++ от 27 Июля 2002, 15:45:47
все равно нихера не выходит!!!
народ, может еще кто-нибудь знает другие способы?
Название: Двоичные файлы
Отправлено: Serchey от 27 Июля 2002, 16:45:30
open(X,">./file");
binmode(X);
print X pack("N*",4325345);
close X;
Название: Двоичные файлы
Отправлено: Chs от 28 Июля 2002, 22:17:18
Цитировать
все равно нихера не выходит!!!

Выражаемся культурнее, да?
Предупреждение.
Название: Двоичные файлы
Отправлено: Serchey от 29 Июля 2002, 00:32:38
C++, ты зря на binmode() наежаешь - как я понял, ты просто её не туда тулишь.
Название: Двоичные файлы
Отправлено: C++ от 29 Июля 2002, 06:14:03
to Serchey - огромное спасибо, все получилось и просто супер.
to Chs- это я так, сгоряча, просто сил моих уже не было, осознал, исправился.
Название: Двоичные файлы
Отправлено: Serchey от 29 Июля 2002, 10:50:02
From Serchey - незачто :)