<?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[Bitmaps parsen mit Streams: Zeichen werden übersprungen?]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich möchte gerne ein Bitmap lesen. Mir geht es zunächst um den Header. Die Daten dafür habe ich mir einfach bei <a href="http://wotsit.org" rel="nofollow">wotsit.org</a> geholt, die Struktur ist:</p>
<pre><code>struct BitmapFileHeader
	{
		unsigned char	type[2];		// 2 bytes
		unsigned long	size;			// 4 bytes
		unsigned short	zero1;			// 2 bytes
		unsigned short	zero2;			// 2 bytes
		unsigned long	offsetToData;	        // 4 bytes
	};
</code></pre>
<p>Ich wollte jetzt einfach nur mit ifstream::read arbeiten, aber das klappt nicht. Ich bin hier Mal über Umwege mit memcpy gegangen, um das Problem zu verdeutlichen, das ich auch ohne den Umweg habe. Mein Code ist daher gerade:</p>
<pre><code>ifstream header(filename.c_str(), ios::in | ios::binary);

		if(!header)
			return;

		char cs[14];
		header.read(cs, 14);

		memcpy(&amp;bitmapFileHeader_, cs, 14);
</code></pre>
<p>Hab vorher mit sizeof schon Mal geschaut, dass die Größe 14 ist. Bin halt schon im Debugging. So, und nach memcpy ist dann irgendeine irrelevante Anweisung, in der ein Haltepunkt sitzt und Folgendes sind die Daten, die ich nicht verstehe:</p>
<pre><code>-		cs	0x0020fb00 &quot;BMbš&quot;	char [14]
		[0]	66 'B'	char
		[1]	77 'M'	char
		[2]	98 'b'	char
		[3]	-102 'š'	char
		[4]	5 ''	char
		[5]	0	char
		[6]	0	char
		[7]	0	char
		[8]	0	char
		[9]	0	char
		[10]	54 '6'	char
		[11]	0	char
		[12]	0	char
		[13]	0	char

-		bitmapFileHeader_	{type=0x0020f6f8 &quot;BMbš&quot; size=5 zero1=0 ...}	OpenGL::BitmapFileHeader
-		type	0x0020f6f8 &quot;BMbš&quot;	unsigned char [2]
		[0]	66 'B'	unsigned char
		[1]	77 'M'	unsigned char
		size	5	unsigned long
		zero1	0	unsigned short
		zero2	54	unsigned short
		offsetToData	3435921408	unsigned long
</code></pre>
<p>Das stimmt ja einfach nicht überein. Ich meine, wieso ist size = 5? Size müsste doch das 3. Byte sein. Der Wert 5 entspricht aber vielmehr dem 5. Byte. Erstmalig erkannt hab ich das Problem dadurch, dass zero2 nicht 0 ist, was es laut Spezi von wotsit aber sein sollte. Na ja, wo ist mein Fehler? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244376/bitmaps-parsen-mit-streams-zeichen-werden-übersprungen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 10:14:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244376.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jun 2009 13:17:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 13:17:33 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich möchte gerne ein Bitmap lesen. Mir geht es zunächst um den Header. Die Daten dafür habe ich mir einfach bei <a href="http://wotsit.org" rel="nofollow">wotsit.org</a> geholt, die Struktur ist:</p>
<pre><code>struct BitmapFileHeader
	{
		unsigned char	type[2];		// 2 bytes
		unsigned long	size;			// 4 bytes
		unsigned short	zero1;			// 2 bytes
		unsigned short	zero2;			// 2 bytes
		unsigned long	offsetToData;	        // 4 bytes
	};
</code></pre>
<p>Ich wollte jetzt einfach nur mit ifstream::read arbeiten, aber das klappt nicht. Ich bin hier Mal über Umwege mit memcpy gegangen, um das Problem zu verdeutlichen, das ich auch ohne den Umweg habe. Mein Code ist daher gerade:</p>
<pre><code>ifstream header(filename.c_str(), ios::in | ios::binary);

		if(!header)
			return;

		char cs[14];
		header.read(cs, 14);

		memcpy(&amp;bitmapFileHeader_, cs, 14);
</code></pre>
<p>Hab vorher mit sizeof schon Mal geschaut, dass die Größe 14 ist. Bin halt schon im Debugging. So, und nach memcpy ist dann irgendeine irrelevante Anweisung, in der ein Haltepunkt sitzt und Folgendes sind die Daten, die ich nicht verstehe:</p>
<pre><code>-		cs	0x0020fb00 &quot;BMbš&quot;	char [14]
		[0]	66 'B'	char
		[1]	77 'M'	char
		[2]	98 'b'	char
		[3]	-102 'š'	char
		[4]	5 ''	char
		[5]	0	char
		[6]	0	char
		[7]	0	char
		[8]	0	char
		[9]	0	char
		[10]	54 '6'	char
		[11]	0	char
		[12]	0	char
		[13]	0	char

-		bitmapFileHeader_	{type=0x0020f6f8 &quot;BMbš&quot; size=5 zero1=0 ...}	OpenGL::BitmapFileHeader
-		type	0x0020f6f8 &quot;BMbš&quot;	unsigned char [2]
		[0]	66 'B'	unsigned char
		[1]	77 'M'	unsigned char
		size	5	unsigned long
		zero1	0	unsigned short
		zero2	54	unsigned short
		offsetToData	3435921408	unsigned long
</code></pre>
<p>Das stimmt ja einfach nicht überein. Ich meine, wieso ist size = 5? Size müsste doch das 3. Byte sein. Der Wert 5 entspricht aber vielmehr dem 5. Byte. Erstmalig erkannt hab ich das Problem dadurch, dass zero2 nicht 0 ist, was es laut Spezi von wotsit aber sein sollte. Na ja, wo ist mein Fehler? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734541</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 13:21:05 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Na ja, wo ist mein Fehler? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Alignment, musst du (Compilerspezifisch) für diese struct ausschalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734544</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 13:23:38 GMT]]></title><description><![CDATA[<p>Mrrr, und wenn ich compilerunspezifischen Code bauen will? Ich meine, das ist ja total schlecht portabel auf diese Weise. Sollte ich vielleicht einfach einen anderen Ansatz des Parsens wählen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734546</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:23:38 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 13:27:27 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Mrrr, und wenn ich compilerunspezifischen Code bauen will? Ich meine, das ist ja total schlecht portabel auf diese Weise. Sollte ich vielleicht einfach einen anderen Ansatz des Parsens wählen?</p>
</blockquote>
<p>Wie du magst. Du kannst<br />
- Compilerswitches einbauen, so dass je nach Compiler entsprechend das Alignment hier ausgeschaltet wird<br />
- Anders einlesen: <code>file.read( &amp;bfh.type, 2 ); file.read( &amp;bfh.size, 4 ); ...</code><br />
- Eine vorgefertigte Bibliothek nehmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734549</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 13:28:57 GMT]]></title><description><![CDATA[<p>Zur Behebung der Strukturenoptimierung in VS-C++:</p>
<pre><code class="language-cpp">#pragma pack( 1 )
struct peter
{
};
#pragma pack( )
</code></pre>
<p>Außerdem: Die 4Bytes sind unzuverlässig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734550</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:28:57 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 13:33:16 GMT]]></title><description><![CDATA[<p>Ja, das mit der Unzuverlässigkeit ist auch so ne Sache. Gibt es irgendwelche sicheren und compiler- sowie bs-unabhängigen Typen für 4 Byte usw.?</p>
<p>Ich les dann einzeln ein, glaub ich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734553</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:33:16 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 13:33:49 GMT]]></title><description><![CDATA[<p>ein binärer filestream und op&gt;&gt; wären denke ich am elegantesten...</p>
<p>zum 1. gibts hier scho was:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-235776-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is--and-printview-is-1-and-start-is-0.html" rel="nofollow">der 3.letzte Beitrag von Werner</a><br />
ist zwar die ausgabe-variante, aber geht mit sicherheit auch umzuschreiben</p>
<p>2. sollte np sein</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734556</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 18:11:39 GMT]]></title><description><![CDATA[<blockquote>
<p>&gt; liest immer entsprechend so viel Byte, wie der rechtsseitige Datentyp lang ist?</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1734679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734679</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 29 Jun 2009 18:11:39 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 18:44:55 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Ich les dann einzeln ein, glaub ich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Genau.<br />
Das geht dann überall.<br />
Wenn du dir ein paar Hilfsfunktionen bastelst, ist das auch halbwegs erträglich.</p>
<p>Und vergiss nicht dass du die Endianness berücksichtigen solltest, falls du es wirklich portabel hinbekommen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734690</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 29 Jun 2009 18:44:55 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 20:18:21 GMT]]></title><description><![CDATA[<p>Hm, wo gibt es denn little und wo big endian?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734744</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 29 Jun 2009 20:18:21 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 20:21:12 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<blockquote>
<p>&gt; liest immer entsprechend so viel Byte, wie der rechtsseitige Datentyp lang ist?</p>
</blockquote>
</blockquote>
<p>ja - allerdings meinte ich, dass du deinem struct einen solchen operator spendierst und dort sinnvollerweise genau das machst, was du beim speichern (dann mit op&lt;&lt;) machst...<br />
weil du das Alignment ja nicht unbedingt mit speichern musst... ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734746</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 29 Jun 2009 20:21:12 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 20:52:27 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>Hm, wo gibt es denn little und wo big endian?</p>
</blockquote>
<p>Guckst du Wikipedia???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734768</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 29 Jun 2009 20:52:27 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 22:36:47 GMT]]></title><description><![CDATA[<p>unskilled:</p>
<p>Ok, das wäre eine Variante. Aber im Endeffekt macht das ja keinen wirklichen Unterschied dazu alles einzeln zu setzen, nur dass es mehr nach Streams aussieht, oder?</p>
<p>hustbaer:<br />
Grundsätzlich sind mir die Begriffe schon klar. Mir ging es jetzt darum, wo das hier im Einzelnen zutrifft. Ich meine, ich operiere auf Byte-Ebene und wüsste jetzt auch gar nicht, wo ich das auf einem Little-Endian-system anders umsetzen müsste bzw. wie ich es jetzt noch plattformunabhängiger gestalten könnte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734807</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Mon, 29 Jun 2009 22:36:47 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 22:49:30 GMT]]></title><description><![CDATA[<p>Eisflamme schrieb:</p>
<blockquote>
<p>wo das hier im Einzelnen zutrifft. Ich meine, ich operiere auf Byte-Ebene und wüsste jetzt auch gar nicht, wo ich das auf einem Little-Endian-system anders umsetzen müsste</p>
</blockquote>
<p>Die Daten in der Bitmap-Datei sind in Little-Endian abgelegt. Wenn dein System mit Big-Endian läuft, musst alle Datentypen mit &gt;1 Byte um-modeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734813</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 29 Jun 2009 22:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Mon, 29 Jun 2009 23:00:05 GMT]]></title><description><![CDATA[<blockquote>
<p>Ok, das wäre eine Variante. Aber im Endeffekt macht das ja keinen wirklichen Unterschied dazu alles einzeln zu setzen, nur dass es mehr nach Streams aussieht, oder?</p>
</blockquote>
<pre><code class="language-cpp">struct data
{
 int a;
 float b;
 long c;
};

//-&gt;weiß nich, ob du das hier jemals brauchst, aber ich schreibs ma mit
Tout_stream&amp; operator&lt;&lt; (Tout_stream &amp;s, const data &amp;these)
{
  s &lt;&lt; these.a &lt;&lt; these.b &lt;&lt; these.c;
  return s;
} //&lt;-

Tin_stream&amp; operator&gt;&gt; (Tin_stream &amp;s, data &amp;these)
{
  s &gt;&gt; these.a &gt;&gt; these.b &gt;&gt; these.c;
  return s;
}

Tin_stream stream(&quot;./save.dat&quot;);
data buf;
stream &gt;&gt; buf;
</code></pre>
<p>wie es mit read und write aussieht, weist du ja selber - und wenn ich statt einer Zeile pro member nur ne hand voll Zeichen brauch, sollte ja wohl klar sein, was ich schöner find...</p>
<p>das du die beiden streamklasen davor noch schreiben musst, ist dann zwar nen Nachteil, aber imho lohnt es sich trotzdem - zu mal du ja schon eine klasse komplett hast (mein 1. link).</p>
<p>aber die probleme von wegen little/big endian bleibt - nur musst du es eben nur noch einmal im code iwo unterscheiden...</p>
<p>falls du hier allerdings nur bhf verstehst, solltest du den ansatz vll vergessen, da es nicht ganz trivial sein wird, die stream-klasse zu schreiben - aber dann solltest du wahrscheinlich allg. bevor du das Problem zu lösen versuchst, noch ein wenig lernen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734815</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 29 Jun 2009 23:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Wed, 01 Jul 2009 07:47:19 GMT]]></title><description><![CDATA[<p>Schon ok, kann alles nachvollziehen. Finde die Idee auch ganz schön und werde sie wohl auch umsetzen. Vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735365</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 01 Jul 2009 07:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Wed, 01 Jul 2009 09:21:53 GMT]]></title><description><![CDATA[<p>Ok, neues Problem. header.read(c, 12); mit c = char[12] liefert mir etwas anderes als header &gt;&gt; c.</p>
<p>Problem ist wohl, dass zero1 und zero2 innerhalb der Datei halt \0 sind und &gt;&gt; da abzubrechen scheint. Der Stream ist binary und ich habe auch versucht Manipulatoren wie std::ws, std::noskipws usw. zu nutzen. Leider war das nicht so erfolgreich.</p>
<p>Welchen Manip müsste ich dafür denn benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735415</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 01 Jul 2009 09:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Wed, 01 Jul 2009 10:55:49 GMT]]></title><description><![CDATA[<p>Du hast doch nen eigenen Stream-Typen gebaut - dann kannst du also auch so etwas machen:</p>
<pre><code class="language-cpp">struct TinputStream
{
  typedef size_t size_type;

/*...*/

  template &lt;typename T&gt;
  friend TinputStream&amp; operator&gt;&gt; (TinputStream&amp; s, T&amp; these)
  {
    return s.read(reinterpret_cast&lt;char*&gt;(&amp;these), sizeof(T));
  }
  }
  template &lt;typename T, size_type len&gt;
  friend TinputStream&amp; operator&gt;&gt; (TinputStream&amp; s, T&amp; (these[len]))
  {
    return s.read(reinterpret_cast&lt;char*&gt;(&amp;these), sizeof(T)*len);
  }
};
</code></pre>
<p>bin ich mir allerdings nicht ganz sicher, ob das geht... und vor allem geht es nicht mehr, wenn irgend ne länge nicht zur compilezeit bekannt ist...<br />
ich würd std::tr1::array oder std::vector nehmen und dann nen op&gt;&gt; für die zu speziallisieren - du musst halt davor die länge setzen und dann liest der op&gt;&gt; so viel ein, wie der vector/das array lang ist...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735491</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 01 Jul 2009 10:55:49 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Wed, 01 Jul 2009 12:11:18 GMT]]></title><description><![CDATA[<p>Na ja, ich hab einfach in meinem operator&gt;&gt; nicht den operator&gt;&gt; des übergebenen is benutzt, sondern auch da das read benutzt. Das funktioniert natürlich, gerade, da die Daten auch fix sind:</p>
<pre><code>inline std::istream&amp; operator&gt;&gt;(std::istream&amp; is, BitmapFileHeader&amp; bfh)
	{
		is.read(reinterpret_cast&lt;char*&gt;(bfh.type),			2);
		is.read(reinterpret_cast&lt;char*&gt;(&amp;bfh.size),			4);
		is.read(reinterpret_cast&lt;char*&gt;(&amp;bfh.zero1),		2);
		is.read(reinterpret_cast&lt;char*&gt;(&amp;bfh.zero2),		2);
		is.read(reinterpret_cast&lt;char*&gt;(&amp;bfh.offsetToData),	4);
		return is;
	}
</code></pre>
<p>Ist halt auch nicht so besonders schön, verlagert den Code im Endeffekt ja nur. Außerdem ist der operator nicht Mal mehr wirklich inline...</p>
<p>Bei deiner Variante hätte ich Probleme mit char*, ich könnte natürlich auch nen optionalen Template-Parameter für die Größe übergeben, aber das wäre ja auch hässlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735502</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 01 Jul 2009 12:11:18 GMT</pubDate></item><item><title><![CDATA[Reply to Bitmaps parsen mit Streams: Zeichen werden übersprungen? on Wed, 01 Jul 2009 15:28:00 GMT]]></title><description><![CDATA[<p>du hast mich nich ganz verstanden ^^<br />
aber dann lass es halt so ;o)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735630</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 01 Jul 2009 15:28:00 GMT</pubDate></item></channel></rss>