Hallo,
hab da ein Problem.
Ich habe eine binäre Datei, die Daten enthält die ich auslesen möchte. Am Anfang der Datei steht irgendein unwichtiger Müll.
Interessant wird es erst, wenn ich in der Datei 0xFFFFFFFF 0xFFFFFF00 finde. Ab da kommen dann die für mich wichtigen Daten.
Wie aber finde ich den Punkt, ab dem meine Daten interessant sind?
Gehe ich Recht in der Annahme, dass 0xFFFFFFF ein UInt32 ist?
Versuche das jetzt so einzulesen:
FileStream fStream;
fStream = new FileStream(file, FileMode.Open);
BinaryReader readFile = new BinaryReader(fStream);
try
{
for (int i = 0; i < 10000000; i++)//einfach mal nen Wert gesetzt
{
UInt32 test = readFile.ReadUInt32();
if (test == 0xFFFFFFFF)
{
test = readFile.ReadUInt32();
if (test == 0xFFFFFF00)
{
MessageBox.Show("juhu");
}
}
}
MessageBox.Show("Nix passiert");
}
catch (EndOfStreamException e)
{
MessageBox.Show("File loaded");
}
Müsste doch eigentlich so gehen, oder?
Allerdings finde ich dieses Vorkommen so nie... Immer nur 0xFFFFFFFF alleine. Aber vielleicht gehe ich die Sache ja auch falsch an. Wäre für Hilfe dankbar...
Tanner
Bei deinem jetzigen Code gehst du ja davon aus dass der Wert wirklich an einer 32 Bit Grenze vorkommt, also cafecafe cafecafe ffffffff ffffff00 ...
Was aber wenn da jetzt sowas steht?
cafecafe cafeffff ffffffff ff00... dann findest du deine Daten nach aktuellen Code nicht, den Fall musst du berücksichtigen.
Am einfachsten ist, du schaust wirklich bitweise, wenn ne 1 kommt schaust nach ob danach wieder ne 1 kommt usw. wenn 56 Einsen kamen und dann 8 Nullen, weist du dass du deine Stelle gefunden hast.
Baka wa shinanakya naoranai.
Mein XING Profil.
Weiterhin:
while(readFile.PeekChar() != -1) {
//Zeuch
}
spart dir die hässliche EndOfStreamException
du schaust wirklich bitweise
Vermutlich wird byteweise reichen...
Nee, Byteweise reicht nicht, weil du damit keine Fälle wie afffffff fffffff0 0... abfangen kannst, weil die Grenze auf nem Halbbyte liegt. Mein erster Vorschlag bitweise zu schaun ist aber auch falsch, weil damit auch Muster wie 1 ffffffff fffffe01 zutreffen würden welche aber net dem Muster entsprechen. Du musst es sogar dann Halbbyte weise vergleichen.
Baka wa shinanakya naoranai.
Mein XING Profil.
Ich möchte halb widersprechen.
Mir klang der erste Post nicht so, als ob eine Bitfolge gesucht würde. Wenn das der Fall sein sollte, hast du, talla, natürlich Recht.
Allerdings werden bei den meisten binären Dateien Werte wirklich byteweise geschrieben, so dass man auch nur byteweise suchen braucht. Dadurch würde der Code deutlich einfacher. Allerdings wird der bremsende Faktor eh die Festplatte sein, so dass es aus Performancegesichtspunkten keinen Unterschied macht.
Ein bitweises Suchen ergibt meist nur bei Bitstreams Sinn, wie zum Beispiel alle MPEG-Dialekte oder andere Audio- und Videoformate.