Gemischte Binaerdaten: wie gehe ich damit geschickt um?



  • Ich habe eine Datei mit Binaerdaten. Dort drinnen tummeln sich verschiedenste Dinge, die zT. als Strings, Bytes, ints, short, usw. interpraetiert werden koennen.
    Im Moment habe ich diese Datei einfach in ein byte[]-Array eingelesen und muss nun, um von dort zB. ein int auszulesen irgendwie solche Verrenkungen anstellen:

    for (int i = 0; i < 4; i++)
    			{
    				oldchk1 |= (int)((scdata[i + 0x210] & 0xff) << (i<<3));
    }
    

    Geht das noch irgendwie geschickter, dass ich gleich von einem entsprechenden Offset ein komplettes, also aus 4 Byte dieses Arrays zusammengesetztes int auslesen kann?
    Was fuer geschicktere Moeglichkeiten haelt java fuer solche Faelle, wo man sonst einfach mit Pointern und Casten... machen wuerde, bereit? 😃



  • DataInputStream?



  • Ok, so weit so praktisch... So wie ich das sehe, kann ich dem Teil meinen FileInputStream verfuettern und dann verschiedene Formate lesen. Das Einzige, was mir fehlt, sind Strings vorgegebener Laenge... Oder gibt es einen geschickten Weg, byte-Arrays miteinander zu vergleichen?



  • byte array -> String geht mit Konstruktor

    Vergleich von byte array wäre ja nur ne Funktion mit for schleife, keine ahnung obs da was fertiges gibt.



  • java.util.Arrays.equals(byte[], byte[])



  • hm, k. So weit passt mir das alles aber irgendwie noch nicht so ganz ins Konzept (vielleicht bin ich auch einfach zu sehr in die Idee mit dem Array verfahren).

    Stream scheint mir nun allgemein doch eher unpassend. Ich brauche RandomAccess (Komprimiertes Zeugs, Lookup-Tables, und mehr so Kram - deshalb ja auch das Byte-Array).
    Die Sache mit dem Vergleich hat den Haken, dass ich im Moment wenn dann eigentlich nur Teile der Arrays vergleichen will, nicht das komplette Ding.
    Das mit dem String-Konstruktor scheint ganz Praktisch. Da ich bei 0-Bytes allerdings gern den String abschliessen moechte, passt das so wohl auch nicht ganz... 🙄

    Achwassoll's ich denke mal, ich bastel mir ein paar innen vielleicht etwas unschoene Funktionen fuer diese Zugriffe und fertig.



  • <ot>
    @ Nubuo T

    Das gleiche Problem hatte ich auch schon mal. War zwar mit C#/.NET (mein erstes "echtes" Projekt damit) aber die Probleme waren identisch. Ich fühle mit dir 🙂
    </ot>



  • Tim schrieb:

    Ich fühle mit dir 🙂

    Das nenn' ich mal mitfühlend 😃



  • Tja, danke.
    Ist eben zT. doch gar nicht so leicht mit diesen eher abstrakten Sprachen. 😃


Anmelden zum Antworten