Schrift
[thread]10479[/thread]

unpack und binärdateien

Leser: 1


<< >> 1 Eintrag, 1 Seite
mordur
 2007-09-27 16:59
#100074 #100074
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
moins,

ich habe eine Binärdatei, welche ein Konfigurationsfile für ein Kabelmodem ist.
Ein Auzug in Textform:
Code: (dl )
1
2
3
4
5
6
7
8
9
Main
{
MtaConfigDelimiter 1;
SnmpMibObject saMtaDevCountryCode.0 Integer 4;
SnmpMibObject pktcMtaDevEnabled.0 Integer 1;
SnmpMibObject saMta.2.1.5.2 String "-10" ;
SnmpMibObject saEmtaSipEndPntProxyAddress.1 String "62.206.3.100" ;

...

Diese Datei liegt als Binärfile vor. Wenn ich die Daten darau nun mit unpack zurückwandle, um sie im Browser darzustellen, erhalte für die Integerwerte nichts.

Der Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# $type ist hier für die Integerwerte INT49, somit kommt "N" für die Funktion unpack in Frage.
# $data ist der Wert der hinter dem Typ im obigen Textfile steht, allerdings sieht er in der Ausgabe etwas anders aus, für die Integer z.B. so: \x01
if ($type eq 'STRING') {
$res = unpack('a*',$data);
}
elsif ($type =~ /^INT(\d*)$/) {
my $ustr;
if ($1 == 1) {
$ustr = 'C';
}
elsif ($1 == 2) {
$ustr = 'n';
}
else {
$ustr = 'N';
}
$res = unpack($ustr,$data);

Wenn ich nun statt "N" in unpack "H" verwende, bekomme ich in $res für mein Beispiel 04 und 01 als Ergebnis. Richtiger wäre ja aber m.E., das "N" funktioniert und ich 4 und 1 erhalte. (im Übrigen erhalte ich mit "C" eine richtige Ausgabe.)

Kann man irgendwie ermitteln, wie die Daten ge'pack't wurden?
<< >> 1 Eintrag, 1 Seite



View all threads created 2007-09-27 16:59.