Avatar billede schris Praktikant
13. marts 2012 - 13:44 Der er 2 kommentarer og
1 løsning

Script til parsning af binær fil

Jeg ønsker at lave et lille perl script, der kan læse gennem en binær fil der har et forholdsvis fast mønster. Scriptet skal bla. kunne følgende:

Læse offset 1-4 (fremhævet) og udlæse det som en c-date
Udlæse offset 5-20 (understreget) i HEX
Læse offset 21-22 (little endian) udlæse værdien og multiplicer med 16  plus 8 bytes (her 11*16+8) (fremhævet)
Springe det udregnede antal bytes frem, læse værdien af de næste to bytes(fremhævet) (little endian) og så slutteligt udskriver den efterfølgende tekststreng, hvis længde er angivet af den sidste udregning.

Dataeksempel kunne se ud som nedenfor

009974384F12590F5F2D3E4E8C364F95212E00F29B0B007723477C8D408D2D30
FB8ADED26A84A35A801B1F2CAD3A9F98EC0C03AD16FBC80CA2F7F5F2A175484
2C93C8DEEA4800EF5405988FCAF8CAC0FB7956C05E7B6F33669FFC310C980F0A2
0D4644EAC37E313A7F7BF560A54F874FC73354B4FC74A70A76CD0748AA3B0030
2FC8F59D0AAC12FFD28C11A22CB22ED3EABD3CB17A48CE59FBC86153530E7D3F
F87225E3680DBA64C49ACEC81D0AB3B02C7DC76ED344B81C3A1D3AEC18BE65B
67BE9192F57687D19000000020100013700446574746520657220656E2074656B
7374737472656E672064657220736B616C207564736B72697665732069206B6C6
1722074656B7374


Jeg har forsøgt mig, men er stadig ret ny i Perl, og har derfor brug for nogle inpu
Avatar billede schris Praktikant
19. marts 2012 - 06:57 #1
Fandt selv løsning - indlæste binær fil i buffer og omsatte den til en hex streng:

sub HexString {
    my $value=shift;
   
    my @list="";
        foreach (split(//, $value)){
        my $single_hex_values=sprintf ("%02x", ord($_));
        push(@list,$single_hex_values);
        }
    my $hexstring=sprintf join ('',@list);
    return ($hexstring);

}

open (FH, $file) or die $!;
binmode (FH);
$buffer="";
       
seek (FH,0,0);
read (FH, $buffer,4096);
       
#Binary data is converted into one long string of HEX values - As the string is text, one byte i represented by 2 charachters
my $string=&HexString($buffer);

Enkelte entries blev fundet ved:

$key=$text_tags[0]; # værdi taget fra et array indeholdende forskellige 'tags'
$hit=index($string, $key);
$FileNameLength=(substr($string,$hit+8,4));
$conv=(&HexNumber($FileNameLength))*2;
        $FileName=&HexText(substr($string,$hit+12,$conv));
print "Filename:\t$FileName\n";
Avatar billede schris Praktikant
19. maj 2012 - 09:01 #2
fixet
Avatar billede schris Praktikant
19. maj 2012 - 09:01 #3
..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester