binäre Dateiausgabe
Thomas
- perl
Hallo,
ich möchte gerne eine binäre Datei erzeugen, weiß aber noch nicht wie ich meine Daten auch binär schreiben kann, ohne dass die Zeichen vorher nach ASCII codiert werden:
$bin = "FF";
open (DATEI, ">file.bin");
print DATEI $bin;
nun wird jedes Zeichen ("F"= ASCII 46hex) nach ASCII codiert, in der Datei steht nun (binär) "46 46"
ändere ich die Programmzeile auf
$bin "\xFF", dann entfällt die ASCII-Codierung und in der Datei steht binär "FF" wie gewollt.
Da $bin aber in der Regel keine Konstante ist, sondern ich den Inhalt von $bin berechne, muß ich das "\x" anschließend programmtechnisch hinzufügen
$bin = "\x".$bin
Nun wird der gesamte String, trotz des \x (=5C 78 ASCII) wieder nach ASCII umgewandelt und in der Datei steht nicht "FF", sondern "5C 78 FF FF"
Gibt es da eine komfortable Lösung mit PERL dafür für die binäre Datenausgabe?
Hallo,
ich möchte gerne eine binäre Datei erzeugen, weiß aber noch nicht wie ich meine Daten auch binär schreiben kann, ohne dass die Zeichen vorher nach ASCII codiert werden:
Jow, dann definiere erst einmal, nur für Dich, was eine "binäre Datei" ist. Evntl. helfen dann die Funktionen pack() und unpack() weiter?
Viele Grüße,
Horst Haselhuhn
» Jow, dann definiere erst einmal, nur für Dich, was eine "binäre Datei" ist. Evntl. helfen dann die Funktionen pack() und unpack() weiter?
habe ich mir schon angesehen: Soweit ich das mit meinen bescheidenen PERL-Kenntnissen verstehe und auch ausprobiert habe, erhält man hier erst wieder einen HEX-String (z.B. "FE02CD"). Aber wenn ich diesen in eine DAtei schreibe steht dort drin nicht (hexadezimal) "FE 02 CD" (3 Byte) sondern jeweils der ASCII Wert der einzelnen Zeichen, also 6 Byte.
Hallo,
» Jow, dann definiere erst einmal, nur für Dich, was eine "binäre Datei" ist. Evntl. helfen dann die Funktionen pack() und unpack() weiter?
habe ich mir schon angesehen: Soweit ich das mit meinen bescheidenen PERL-Kenntnissen verstehe und auch ausprobiert habe, erhält man hier erst wieder einen HEX-String (z.B. "FE02CD"). Aber wenn ich diesen in eine DAtei schreibe steht dort drin nicht (hexadezimal) "FE 02 CD" (3 Byte) sondern jeweils der ASCII Wert der einzelnen Zeichen, also 6 Byte.
Es braucht Weile, die pack() und unpack() Funktionen zu verstehen, ich muss da auch ab und zu in das Kochbuch schauen, weil ich diese Funktionen selten verwende.
Hier mal ein Beispiel, was einen 32-bit-binary-string in eine 32-bit-integer Zahl umwandelt:
sub bin2dec{
my $bin = shift;
return unpack("N", pack("a32", $bin));
}
Viele Grüße,
Horst Haselhuhn
Hi,
Gibt es da eine komfortable Lösung mit PERL dafür für die binäre Datenausgabe?
Ich weiß nicht genau was es macht, aber die Beschreibung von binmode hört sich recht brauchbar an.
mfG,
steckl