Hi,
ich habe eine Datei, diese lese ich im binmode ein..
my $fh = IO::File->new();
if (!$fh->open("< ".$file))
{
return 0;
}
binmode($fh);
danach lese ich 4 Byte dieser Datei mit...
read($fh, my $offset, 4);
Nun wandelt ich diesen in einen UINT um ...
$Loffset = unpack ("I", $offset);
Normaler weise sollte ich folgenden Wert erhalten: 898544
Woher habe ich diesen wert ? Nun ich habe die Datei mit einem HEX Editor (UltraEdit) geäffnet. Habe dann den HEX Code der 4 Byte genommen (F0 B5 0D 00) und mit dem Windows Taschenrechner von Hex in Dez umgewandelt. Die zahl ist auch richtig wenn ich dann diese abgleiche (zu beachten ist das der HEX code umgedreht werden muss !).
Warum aber gibt unpack mir eine andere zahl aus ? Auch wenn ich reverse anwende kommt eine andere Zahl raus.
$Loffset = unpack ("I", reverse($offset));
Um zu prüfen ob ich überhaupt richtig auslese habe ich die 4 Byte mal in HEX mit folgender Funktion ausgeben lassen...
sub getHex {
my ($self, $data) = @_;
my $i;
my $return;
for ($i = 0; $i < length($data); $i++)
{
$return .= uc(unpack("H2",substr($data, $i, 1)));
if ($i + 1 < length($data))
{
$return .= " ";
}
}
return $return;
}
und ja, wenn ich print getHex($offset); mache bekomme ich F0 B5 0D 00.
Wo ist mein fehler :/