Lesen von Binärdaten

Hallo Perlexperten m/w,

mittels folgenden Befehlen liest das Perl-Programm eine Binärdatei:
read(EIN, $buf, 2);
$wert= unpack(„v“,$buf);
Alles funktioniert wunderbar, mit einer kleine Ausnahme. Steht in der Binärdatei ‚d0a0‘ liefert das Programm das Ergebnis 10, da ‚d0‘ als Linefeed interpretiert wird. Das Ergebnis sollte aber 2573 lauten.
Hat irgendjemand eine Idee, wie das Problem gelöst werden kann? Natürlich ginge es mit einem IF-Statement. Aber ich suche eine Lösung, die mich nicht über das nächste Steuerzeichen stolpern lässt.

Vielen Dank für jede Hilfe

Axel

Hallo,

> read(EIN, $buf, 2);  
> $wert= unpack("v",$buf);

Alles funktioniert wunderbar, mit einer kleine Ausnahme. Steht
in der Binärdatei ‚d0a0‘ liefert das Programm das Ergebnis 10,
da ‚d0‘ als Linefeed interpretiert wird. Das Ergebnis sollte
aber 2573 lauten.

Das kann ich nicht nachvollziehen:

$ perl -we 'print chr(hex "d0"), chr(hex "a0");'|hexdump
0000000 a0d0 
$ perl -we 'print chr(hex "d0"), chr(hex "a0");'| perl -wle 'my $buf; read(STDIN,$buf, 2); print unpack("v", $buf)'
41168

Bist du dir sicher, dass bei dir 0xD0 0xA0 zu 10 wird? Wenn ja, solltest du ein Bugreport gegen perl schreiben.

Grüße,
Moritz

Hallo Axel,

mittels folgenden Befehlen liest das Perl-Programm eine
Binärdatei:
read(EIN, $buf, 2);
$wert= unpack(„v“,$buf);
Alles funktioniert wunderbar, mit einer kleine Ausnahme. Steht
in der Binärdatei ‚d0a0‘ liefert das Programm das Ergebnis 10,
da ‚d0‘ als Linefeed interpretiert wird. Das Ergebnis sollte
aber 2573 lauten.

Da es sich eventuell um ein Windows-System handelt, hast Du vor dem read

binmode(EIN);

ausgeführt?
Siehe auch hier:
http://de.selfhtml.org/perl/funktionen/einausgabe.ht…

Viele Grüsse
Klaus Bernstein