<?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[binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei]]></title><description><![CDATA[<p>Ich bekomm das hier einfach nicht zum Laufen. Der gelesene String hat immer zusätzliche Sonderzeichen, egal wieviel ich einlese.</p>
<p>Erkennt irgendwer offensichtliche Fehler? Vorschläge, wie ich das einfacher lösen könnte würden mich genauso freuen.</p>
<pre><code class="language-cpp">bool Gif::isPNG(string filename)
{
	string vgl(&quot;PNG&quot;);
	ifstream inf;
	char buffer[3];
	inf.open(filename.c_str(), ios::binary);
	inf.seekg(1);
	inf.read(buffer, 3);
	inf.close();
	if (string(buffer) == vgl) return 1;
	else return 0;
}
</code></pre>
<p>Das funktioniert komischerweise, auch wenn der string eigentlich nur 4 bytes anstatt 8 lang sein sollte:</p>
<pre><code class="language-cpp">bool Gif::isJPG(string filename)
{
	string vgl(&quot;JFIF&quot;);
	ifstream inf;
	char buffer[8];
	inf.open(filename.c_str(), ios::binary);
	inf.seekg(6);
	inf.read(buffer, 8);
	inf.close();
	if (string(buffer) == vgl) return 1;
	else return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/263351/binär-byteweise-lesen-bestimmung-des-dateityps-einer-bilddatei</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 19:27:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263351.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Mar 2010 12:58:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei on Fri, 19 Mar 2010 12:58:25 GMT]]></title><description><![CDATA[<p>Ich bekomm das hier einfach nicht zum Laufen. Der gelesene String hat immer zusätzliche Sonderzeichen, egal wieviel ich einlese.</p>
<p>Erkennt irgendwer offensichtliche Fehler? Vorschläge, wie ich das einfacher lösen könnte würden mich genauso freuen.</p>
<pre><code class="language-cpp">bool Gif::isPNG(string filename)
{
	string vgl(&quot;PNG&quot;);
	ifstream inf;
	char buffer[3];
	inf.open(filename.c_str(), ios::binary);
	inf.seekg(1);
	inf.read(buffer, 3);
	inf.close();
	if (string(buffer) == vgl) return 1;
	else return 0;
}
</code></pre>
<p>Das funktioniert komischerweise, auch wenn der string eigentlich nur 4 bytes anstatt 8 lang sein sollte:</p>
<pre><code class="language-cpp">bool Gif::isJPG(string filename)
{
	string vgl(&quot;JFIF&quot;);
	ifstream inf;
	char buffer[8];
	inf.open(filename.c_str(), ios::binary);
	inf.seekg(6);
	inf.read(buffer, 8);
	inf.close();
	if (string(buffer) == vgl) return 1;
	else return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1871274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871274</guid><dc:creator><![CDATA[ichbinsisyphos]]></dc:creator><pubDate>Fri, 19 Mar 2010 12:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei on Fri, 19 Mar 2010 13:00:16 GMT]]></title><description><![CDATA[<p>Du musst die Nullterminierung der char-Arrays beachten, oder du sagst dem Konstruktor von std::string, wie weit er den char* kopieren soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871277</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Fri, 19 Mar 2010 13:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei on Fri, 19 Mar 2010 13:05:21 GMT]]></title><description><![CDATA[<p>Maxi schrieb:</p>
<blockquote>
<p>Du musst die Nullterminierung der char-Arrays beachten, oder du sagst dem Konstruktor von std::string, wie weit er den char* kopieren soll.</p>
</blockquote>
<p>Ja danke, genau das wars.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871280</guid><dc:creator><![CDATA[ichbinsisyphos]]></dc:creator><pubDate>Fri, 19 Mar 2010 13:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei on Fri, 19 Mar 2010 15:23:35 GMT]]></title><description><![CDATA[<p>ichbinsisyphos schrieb:</p>
<blockquote>
<p>Vorschläge, wie ich das einfacher lösen könnte würden mich genauso freuen.</p>
</blockquote>
<p>Da die <a href="http://de.wikipedia.org/wiki/Portable_Network_Graphics#Dateikopf" rel="nofollow">ersten 8 Bytes eines PNG-File</a>s quasi Text-Kompatibel sind, kannst Du sie auch wie ein Text-File behandeln. Das vereinfacht Dein Problem zu:</p>
<pre><code class="language-cpp">bool Gif::isPNG( const std::string&amp; filename )
{
    using namespace std;
    ifstream inf( filename.c_str(), ios::binary );
    string magic;
    return inf.ignore(1) &gt;&gt; setw(3) &gt;&gt; magic &amp;&amp; magic == &quot;PNG&quot;;
}
</code></pre>
<p>Der Zusatz setw(3) (erfordert #include &lt;iomanip&gt;) ist für die Funktion nicht erforderlich, er schützt aber davor, Unmengen von Daten in den Speicher zu lesen, wenn es kein PNG-File ist.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871344</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 19 Mar 2010 15:23:35 GMT</pubDate></item><item><title><![CDATA[Reply to binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei on Sat, 20 Mar 2010 22:46:05 GMT]]></title><description><![CDATA[<p>Ja, ist besser. Ich frag mich aber grad ... mit setw(3) wird nur in Blöcken von 3 Zeichen übergeben? Also liefert die Abfrage gleich beim ersten Mal true/false.</p>
<p>Und wenn das fehlt? Müsste er nicht schon beim ersten Zeichen die Strings vergleichen und false liefern oder übergibt er den gesamten Inhalt der Datei? Und werden nur String gleicher Länge verglichen, also zählen dann auch nur die ersten 3 Zeichen? Oder alles, was wieder false liefert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1871824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1871824</guid><dc:creator><![CDATA[ichbinsisyphos]]></dc:creator><pubDate>Sat, 20 Mar 2010 22:46:05 GMT</pubDate></item><item><title><![CDATA[Reply to binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei on Sun, 21 Mar 2010 18:00:53 GMT]]></title><description><![CDATA[<p>ichbinsisyphos schrieb:</p>
<blockquote>
<p>Ich frag mich aber grad ... mit setw(3) wird nur in Blöcken von 3 Zeichen übergeben? Also liefert die Abfrage gleich beim ersten Mal true/false.</p>
<p>Und wenn das fehlt? Müsste er nicht schon beim ersten Zeichen die Strings vergleichen und false liefern oder übergibt er den gesamten Inhalt der Datei? Und werden nur String gleicher Länge verglichen, also zählen dann auch nur die ersten 3 Zeichen? Oder alles, was wieder false liefert?</p>
</blockquote>
<p>Ich verstehe Deine Frage nicht so ganz.<br />
setw(3) heißt nur, das maximal 3 Zeichen in die Stringvariable 'magic' gelesen werden. Lässt man das setw(3) weg, so werden so viele Zeichen gelesen bis ein sogenannter <a href="http://de.wikipedia.org/wiki/Leerraum" rel="nofollow">White Space Character</a> folgt. Mit andereren Worten: Der Ausdruck istream &gt;&gt; string liest immer ein Wort, wie auch ein Mensch ein Wort lesen würde. Bei einer PNG-Datei ist das 5.Zeichen per Format-Definition ein CR (Code 13 bzw. 0x0D) und das ist ein White Space und damit stoppt das Einlesen an dieser Stelle auch ohne ein setw(..).</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1872161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872161</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 21 Mar 2010 18:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to binär byteweise lesen - Bestimmung des Dateityps einer Bilddatei on Sun, 21 Mar 2010 21:26:18 GMT]]></title><description><![CDATA[<p>Aso, sowieso nur bis zum ersten whitespace, ok verstehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1872237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1872237</guid><dc:creator><![CDATA[ichbinsisyphos]]></dc:creator><pubDate>Sun, 21 Mar 2010 21:26:18 GMT</pubDate></item></channel></rss>