<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[reguläre ausdrücke auf binärdateien anwenden]]></title><description><![CDATA[<p>Hi,<br />
wie der Titel schon sagt,<br />
kennt ihr ne Möglichkeit/bibliothek mit der man Binärdatem mittels regexes durchsuche kann?</p>
<p>Hintergrund ist der, dass ich ein Dateiformat habe, dass ich nicht kenne, wo aber sachen drin stehen, die ich raus parsen möchte.</p>
<p>Ich glaube ein muster gefunden zu haben, nach dem ich die relevanten Daten herausbeomme.<br />
Die frage ist nur wie man das möglichst einfach rausbekommt.</p>
<p>Das Problem mit standardfunktionen ist ja, dass die bei 0 aufhören, was in binärdateien aber ständig vorkommt.</p>
<p>Muser sieht in etwas so aus:<br />
eine bestimmte Zeichenfolge (davor kann beliebig viel zeug stehen) auf die wieder beliebiges zeug kommt bis zu einem Muster 0x01 0x00 0x00 0x?? und dann der String den ich suche.</p>
<p>HAt jemand ne idee?</p>
<p>MfG,Vlad</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243530/reguläre-ausdrücke-auf-binärdateien-anwenden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 00:19:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243530.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Jun 2009 21:10:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Wed, 17 Jun 2009 21:10:35 GMT]]></title><description><![CDATA[<p>Hi,<br />
wie der Titel schon sagt,<br />
kennt ihr ne Möglichkeit/bibliothek mit der man Binärdatem mittels regexes durchsuche kann?</p>
<p>Hintergrund ist der, dass ich ein Dateiformat habe, dass ich nicht kenne, wo aber sachen drin stehen, die ich raus parsen möchte.</p>
<p>Ich glaube ein muster gefunden zu haben, nach dem ich die relevanten Daten herausbeomme.<br />
Die frage ist nur wie man das möglichst einfach rausbekommt.</p>
<p>Das Problem mit standardfunktionen ist ja, dass die bei 0 aufhören, was in binärdateien aber ständig vorkommt.</p>
<p>Muser sieht in etwas so aus:<br />
eine bestimmte Zeichenfolge (davor kann beliebig viel zeug stehen) auf die wieder beliebiges zeug kommt bis zu einem Muster 0x01 0x00 0x00 0x?? und dann der String den ich suche.</p>
<p>HAt jemand ne idee?</p>
<p>MfG,Vlad</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728486</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 17 Jun 2009 21:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Wed, 17 Jun 2009 22:36:34 GMT]]></title><description><![CDATA[<p>erst konvertieren mit sowas: <a href="http://www.perlmonks.org/?node_id=711532" rel="nofollow">http://www.perlmonks.org/?node_id=711532</a><br />
oder gleich selber schreiben</p>
<pre><code class="language-cpp">while(eingabe.get(ch))
  if(isgraph(ch) or isspace(ch))//iscntrl?
    ausgabe&lt;&lt;ch;
  else
    ausgabe&lt;&lt;&quot;\\0x&quot;&lt;&lt;hex&lt;&lt;int(ch);
</code></pre>
<p>dann müßtest du prima nach \0x1\0x0\0x0\0x0\[a-z]*\0x0 und so suchen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728521</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 17 Jun 2009 22:36:34 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Thu, 18 Jun 2009 06:22:28 GMT]]></title><description><![CDATA[<p>hmm, das wär eine Idee.</p>
<p>Allerdings wird der reguläre ausdruck extrem schwer handlebar, da für die codierung jedes char nun 1-4 Zeichen benötigt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728553</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Thu, 18 Jun 2009 06:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Thu, 18 Jun 2009 06:35:19 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>hmm, das wär eine Idee.<br />
Allerdings wird der reguläre ausdruck extrem schwer handlebar, da für die codierung jedes char nun 1-4 Zeichen benötigt werden.</p>
</blockquote>
<p>Ist ein Argument. Willst ja bei &quot;0815&quot; nicht einen Splitter von &quot;\0x00815&quot; finden.<br />
Also dahingehend das Format aufpeppen.<br />
Vielleicht eckige Klammern und alle nichtdruckbaren Zeichen und die eckigen Klammern werden durch zwei Klammern mit der zweistelligen Hexzahl drin ausgegeben.<br />
[00]815<br />
Das müßte gegen Splitter schützen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728560</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 18 Jun 2009 06:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Thu, 18 Jun 2009 06:47:52 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Muser sieht in etwas so aus:<br />
eine bestimmte Zeichenfolge (davor kann beliebig viel zeug stehen) auf die wieder beliebiges zeug kommt bis zu einem Muster 0x01 0x00 0x00 0x?? und dann der String den ich suche.</p>
</blockquote>
<p>Such doch einfach ohne regex nach der ersten Zeichenfolge und dann nach der 0x01 0x00 0x00 und dann hast du die Stelle die du willst. Ist glaub ich einfacher, als da jetzt ewig zu versuchen was mit regex hinzu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728564</guid><dc:creator><![CDATA[warumregex]]></dc:creator><pubDate>Thu, 18 Jun 2009 06:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Thu, 18 Jun 2009 12:08:03 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>hmm, das wär eine Idee.<br />
Allerdings wird der reguläre ausdruck extrem schwer handlebar, da für die codierung jedes char nun 1-4 Zeichen benötigt werden.</p>
</blockquote>
<p>Ist ein Argument. Willst ja bei &quot;0815&quot; nicht einen Splitter von &quot;\0x00815&quot; finden.<br />
Also dahingehend das Format aufpeppen.<br />
Vielleicht eckige Klammern und alle nichtdruckbaren Zeichen und die eckigen Klammern werden durch zwei Klammern mit der zweistelligen Hexzahl drin ausgegeben.<br />
[00]815<br />
Das müßte gegen Splitter schützen.</p>
</blockquote>
<p>Was wahrscheinlichbesser wär, wenn man einfach alles ins ascii-hex format wandelt</p>
<p>was ich aber eigentlich meinte war, dass man den reg-ex scanner dahingehend ändern müsste, dass ein '.' ebend nicht aufein char sondern sondern 2 char matcht und auch alle Zeichenklassen anderes sind.</p>
<p>warumregex schrieb:</p>
<blockquote>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Muser sieht in etwas so aus:<br />
eine bestimmte Zeichenfolge (davor kann beliebig viel zeug stehen) auf die wieder beliebiges zeug kommt bis zu einem Muster 0x01 0x00 0x00 0x?? und dann der String den ich suche.</p>
</blockquote>
<p>Such doch einfach ohne regex nach der ersten Zeichenfolge und dann nach der 0x01 0x00 0x00 und dann hast du die Stelle die du willst. Ist glaub ich einfacher, als da jetzt ewig zu versuchen was mit regex hinzu bekommen.</p>
</blockquote>
<p>hast wahrscheinlich recht.<br />
hät ja sein können, jemand eine leicht zu handhabende Bibliothek kennt, die genau sowas unterstützt.<br />
Zumal ich nicht weiß, ob mein Muster wirklich in allen fällen passt, ein regex wär dann einfacher anzupassen, anstatt die komplizierte ich-suche-bis-dahin-dann-schau-ich-danach-Statemaschine zu bauen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728772</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Thu, 18 Jun 2009 12:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Thu, 18 Jun 2009 18:02:54 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Was wahrscheinlichbesser wär, wenn man einfach alles ins ascii-hex format wandelt</p>
</blockquote>
<p>stimmt.</p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>was ich aber eigentlich meinte war, dass man den reg-ex scanner dahingehend ändern müsste, dass ein '.' ebend nicht aufein char sondern sondern 2 char matcht und auch alle Zeichenklassen anderes sind.</p>
</blockquote>
<p>stimmt.<br />
mit &quot;alles hex&quot; kannste aber wieder statt<br />
ha.*lo\0x0<br />
ein<br />
6861(..)*6c6f00<br />
machen.</p>
<p>ist auch mit <a href="http://www.torsten-horn.de/techdocs/ascii.htm" rel="nofollow">http://www.torsten-horn.de/techdocs/ascii.htm</a> recht schnell getippt.<br />
oder du baust dir eine funktion, die sogar die suchstrings aufbereitet.<br />
aus &quot;ha.*lo\0\1&quot; kann man ja den string &quot;6861(..)*6c6f0001&quot; berechnen. vielleicht so: erst das char-array in ein int-array kopieren, um spezialzeichen zu haben, beim umkopieren und dabei sachen wie &quot;\&quot; und &quot;/(&quot; unescapen, dafür aber &quot;(&quot; und &quot;*&quot; zu spezialints ab 256 machen. dann das int-array zurück in ein char-array kopieren und dabei aus &quot;.&quot;(=256,sonderzeichen) ein &quot;(..)&quot; und aus jedem int unter 256 die beiden hexziffern machen.</p>
<p>und natürlich nicht</p>
<pre><code class="language-cpp">cr=convertRegexpToCoolRegexp(&quot;ha.*lo\0\1&quot;);
</code></pre>
<p>mit nur</p>
<pre><code class="language-cpp">string convertRegexpToCoolRegexp(string r);
</code></pre>
<p>und damit bei \0 aus versehen abschneiden, sondern mit auch</p>
<pre><code class="language-cpp">template&lt;size_t size&gt; 
string convertRegexpToCoolRegexp(char (&amp;r)[size]){
   string sr;
   copy(r,r+size,back_inserter(sr));
   return convertRegexpToCoolRegexp(sr);
}
</code></pre>
<p>(alle codebeispiele sind so nicht ernst gemeint, sondern erläutern nur meine wirren gedankengänge.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729005</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 18 Jun 2009 18:02:54 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Thu, 18 Jun 2009 18:09:03 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Zumal ich nicht weiß, ob mein Muster wirklich in allen fällen passt, ein regex wär dann einfacher anzupassen, anstatt die komplizierte ich-suche-bis-dahin-dann-schau-ich-danach-Statemaschine zu bauen</p>
</blockquote>
<p>Außerdem schüttet mein Körper beim Gedanken an die Mit-Und-Ohne-Null-Vergleichsmethode lauter Hormone aus, die auch kommen, wenn ich mir ein Knie breche. Das werte ich als ein schlechtes Omen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729008</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 18 Jun 2009 18:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to reguläre ausdrücke auf binärdateien anwenden on Thu, 18 Jun 2009 20:00:30 GMT]]></title><description><![CDATA[<p>lol</p>
<p>Danke, habs jetzt auf die pragmatische art zusammengefrickelt.<br />
Das selbst zu bauen, wär mir dann doch zu viel arbeit gewesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729077</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Thu, 18 Jun 2009 20:00:30 GMT</pubDate></item></channel></rss>