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