Thread Datei Binär auslesen (14 answers)
Opened by Froschpopo at 2005-04-06 00:20

Dubu
 2005-04-06 16:08
#53363 #53363
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ah, ich verstehe.
Da wuerde ich aber keine Binaerdarstellung nehmen, sondern Hex, das spart Platz.

Hier mal ein Prograemmchen, dass Binaerdaten in Hexdaten umwandelt oder umgekehrt, je nachdem, unter welchem Name (bin2hex oder hex2bin) man es aufruft:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl
# bin2hex - wandle Binaerdatei in Hexadezimaldarstellung um.
# hex2bin - wandle Hexadezimaldarstellung in Binaerdatei um.
#
# Aufruf: bin2hex binaerdatei hexdatei
# oder    hex2bin hexdatei binaerdatei
#
#
use strict;
use warnings;

die "Aufruf: $0 infile outfile" unless @ARGV == 2;

my ($infile, $outfile) = @ARGV;

die "Eingabe und Ausgabe muessen verschieden sein" unless $infile ne $outfile;

open (my $in, $infile) or die "kann $infile nicht oeffnen: $!";
open (my $out, '>', $outfile) or die "kann $outfile nicht oeffnen: $!";

if ($0 =~ /bin2hex$/) {
   bin2hex($in, $out);
} elsif ($0 =~ /hex2bin$/) {
   hex2bin($in, $out);
} else {
die "Das Programm muss bin2hex oder hex2bin heissen!";
}

close $in;
close $out;

##########

sub bin2hex {
   my ($from, $to) = @_;

   binmode $in;
   $/ = \8;    # immer 8 Bytes einlesen
   while (<$from>) {
       print $to unpack("H*", $_), "\n";
   }
}

sub hex2bin {
   my ($from, $to) = @_;

   binmode $out;
   while (<$from>) {
       chomp;  # Zeilenenden abschneiden
       print $to pack ("H*", $_);
   }
}

Das kannst du sicherlich anpassen.

Edit: Fehlermeldung eingefuegt, wenn das Programm einen falshcen Namen hat. :)\n\n

<!--EDIT|Dubu|1112790688-->

View full thread Datei Binär auslesen