LINUX.ORG.RU

По байтовое считывание в Perl


0

0

есть бинарный файл, мне необходимо считывать из него побайтового и анализировать значения, т.е. получать численные значения (считал 4 байта - получил десятичное число). А то у меня мусор какойто читается


Ответ на: комментарий от DKorolkov

my $CRC;

my $Length;

my $data;

my $offset = 0;

#sysopen SRC_FILE, $file_name, O_BINARY;

binmode SRC_FILE;

open OUT_FILE, ">$fout" or die "Can't open file: $!";

$offset = read SRC_FILE, $data, 4;

$Length = unpack "N", $data;

$offset += read SRC_FILE, $CRC, 2, $offset;

вот как пробовал я.

nil5
() автор топика
Ответ на: комментарий от nil5

> $offset = read SRC_FILE, $data, 4;

Считанные данные являются результатом, а смещение -- параметром функции read. У вас, похоже, наоборот.

DKorolkov
()
Ответ на: комментарий от DKorolkov

read FILEHANDLE,SCALAR,LENGTH,OFFSET read FILEHANDLE,SCALAR,LENGTH Attempts to read LENGTH bytes of data into variable SCALAR from the specified FILEHANDLE. Returns the number of bytes actually read, 0 at end of file, or undef if there was an error. SCALAR will be grown or shrunk to the length actually read. If SCALAR needs growing, the new bytes will be zero bytes. An OFFSET may be specified to place the read data into some other place in SCALAR than the beginning. The call is actually implemented in terms of stdio's fread(3) call. To get a true read(2) system call, see sysread.

> Считанные данные являются результатом, а смещение -- параметром функции read. У вас, похоже, наоборот.

Все же не наоборот

nil5
() автор топика
Ответ на: комментарий от DKorolkov

ошибка найдена unpack "N", $data надо заменить на unpack "V", $data

nil5
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.