<?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[Portabilität size_t]]></title><description><![CDATA[<p>Hey,</p>
<p>wie portabel ist size_t? Ich muss ein 4 Byte großes size_t aus einer Datei (binär) laden. Welche Probleme könnten auftreten? Wie kann ich diese lösen?</p>
<p>Noch eine weitere Frage: Wie portabel ist eine AES implementation? Kann es dort Probleme geben oder sind solche Implementation meist portabel?</p>
<p>Vielen Dank<br />
Dirkyy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259971/portabilität-size_t</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 15:48:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259971.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Jan 2010 08:58:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 08:58:06 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>wie portabel ist size_t? Ich muss ein 4 Byte großes size_t aus einer Datei (binär) laden. Welche Probleme könnten auftreten? Wie kann ich diese lösen?</p>
<p>Noch eine weitere Frage: Wie portabel ist eine AES implementation? Kann es dort Probleme geben oder sind solche Implementation meist portabel?</p>
<p>Vielen Dank<br />
Dirkyy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847386</guid><dc:creator><![CDATA[Dirkyy]]></dc:creator><pubDate>Sat, 30 Jan 2010 08:58:06 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 10:25:23 GMT]]></title><description><![CDATA[<p>size_t ist definiert als der vorzeichenlose Ganzzahltyp, der von sizeof zurückgegeben wird. Was man da reininterpretiert bleibt dem Implementierer überlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847406</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 30 Jan 2010 10:25:23 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 12:54:38 GMT]]></title><description><![CDATA[<p>Dirkyy schrieb:</p>
<blockquote>
<p>wie portabel ist size_t? Ich muss ein 4 Byte großes size_t aus einer Datei (binär) laden. Welche Probleme könnten auftreten? Wie kann ich diese lösen?</p>
</blockquote>
<p>Wie SeppJ gesagt hat. Allerdings gibt es zum Teil Möglichkeiten, entsprechend grosse Typen zu bekommen. Zum Beispiel hat man bei Boost:<br />
<a href="http://www.boost.org/doc/libs/1_41_0/libs/integer/cstdint.htm" rel="nofollow">http://www.boost.org/doc/libs/1_41_0/libs/integer/cstdint.htm</a></p>
<p>Man kann allerdings auch eine einfache Möglichkeit bauen, um zu überprüfen, ob <code>std::size_t</code> mindestens 4 Bytes hat:</p>
<pre><code class="language-cpp">template&lt;bool check&gt;
struct StaticAssert;

template&lt;&gt;
struct StaticAssert&lt;true&gt; { };

template&lt;typename T, size_t bytes&gt;
struct HasAtLeastBytes
{
  StaticAssert&lt;sizeof(T) &gt;= bytes&gt; check;
};

#include &lt;cstddef&gt; // Für std::size_t

int main()
{
  HasAtLeastBytes&lt;std::size_t, 4&gt; checkSizeT;

  return 0;
}
</code></pre>
<p>Falls <code>std::size_t</code> weniger als 4 Bytes beim Kompilieren hat, wird die Kompilation abbrechen. Du kannst es zum Beispiel mal so testen:</p>
<pre><code class="language-cpp">int main()
{
  HasAtLeastBytes&lt;std::size_t, 40&gt; checkSizeT;

  return 0;
}
</code></pre>
<p>Das sollte seeeehr wahrscheinlich nicht kompilieren <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>Dirkyy schrieb:</p>
<blockquote>
<p>Noch eine weitere Frage: Wie portabel ist eine AES implementation? Kann es dort Probleme geben oder sind solche Implementation meist portabel?</p>
</blockquote>
<p>Kommt wohl ganz auf die Implementation drauf an. Wobei AES natürlich ein Standard ist, steht ja im Namen <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/1847474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847474</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Jan 2010 12:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 13:00:30 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich muss ein 4 Byte großes size_t aus einer Datei (binär) laden.</p>
</blockquote>
<p>Dann nimm doch einen Datentyp der garantiert diese Groesse hat, z.B. uint32_t aus stdint.h. Ab C++0X soll dann auch #include &lt;cstdint&gt; funktionieren, g++ moniert aber, ich sollte doch bitte den entsprechenden Kompilerschalter fuer den zukuenftigen Standard setzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847475</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 30 Jan 2010 13:00:30 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 13:00:16 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Ich muss ein 4 Byte großes size_t aus einer Datei (binär) laden.</p>
</blockquote>
<p>Dann nimm doch einen Datentyp der garantiert diese Groesse hat, z.B. uint32_t aus stdint.h</p>
</blockquote>
<p>Nur ist <code>stdint.h</code> kein Standard C++ Header <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Und <code>cstdint</code> gibt es auch nicht.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847476</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Jan 2010 13:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 13:10:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Nur ist stdint.h kein Standard C++ Header</p>
</blockquote>
<p>Natuerlich nicht, weil die Groesse von den verschiedenen Integertypen im Standard nicht definiert sind. Es gibt deswegen keinen Weg, mit Standardmitteln zu garantieren, dass ein Integer eine betimmte Groesse hat. Das sagt mir mein g++ bei <em>#include &lt;cstdint&gt;</em>:</p>
<blockquote>
<p>In Datei, eingefügt von /usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/cstdint:35,<br />
von main.cpp:7:<br />
/usr/lib/gcc/i586-redhat-linux/4.4.1/../../../../include/c++/4.4.1/c++0x_warning.h:31:2: Fehler: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1847482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847482</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 30 Jan 2010 13:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 13:26:07 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Nur ist stdint.h kein Standard C++ Header</p>
</blockquote>
<p>Natuerlich nicht, weil die Groesse von den verschiedenen Integertypen im Standard nicht definiert sind. Es gibt deswegen keinen Weg, mit Standardmitteln zu garantieren, dass ein Integer eine betimmte Groesse hat.</p>
</blockquote>
<p>Was redest du da?<br />
<code>stdint.h</code> ist ein C99 Header und hat eben keinen Bezug zum aktuellen C++ Standard. Und wenn der Autor schon wegen Portabilität fragt, dürfte dies wirklich der falsche Ansatz sein.</p>
<p>Und doch es gibt einen Weg, den habe ich gezeigt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847498</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Jan 2010 13:26:07 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 13:59:43 GMT]]></title><description><![CDATA[<blockquote>
<p>Und doch es gibt einen Weg, den habe ich gezeigt.<br />
...<br />
Falls std::size_t weniger als 4 Bytes beim Kompilieren hat, wird die Kompilation abbrechen.</p>
</blockquote>
<p>Tja und dann?</p>
<blockquote>
<p>stdint.h ist ein C99 Header und hat eben keinen Bezug zum aktuellen C++ Standard. Und wenn der Autor schon wegen Portabilität fragt, dürfte dies wirklich der falsche Ansatz sein.</p>
</blockquote>
<p>Warum ist das der falsche Weg, wenn der eine Standard (hier C++) etwas nicht hergibt, einen anderen (hier C99) zu verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847517</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 30 Jan 2010 13:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 14:05:27 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Und doch es gibt einen Weg, den habe ich gezeigt.<br />
...<br />
Falls std::size_t weniger als 4 Bytes beim Kompilieren hat, wird die Kompilation abbrechen.</p>
</blockquote>
<p>Tja und dann?</p>
</blockquote>
<p>Dann hast du die Sicherheit, dass du nicht ein Programm kompiliert hast, welches undefiniertes Verhalten auslöst. Es ist eine Sicherung mehr nicht. Da aber die verbreitesten und meisten Plattformen wohl <code>std::size_t</code> mit 4 oder mehr Bytes versehen werden, wird der Code meistens kompilieren.</p>
<p>Ansonsten kann man eben auch Boost verwenden. Die vereinen alle nicht portablen Erweiterungen und bieten einen portablen Header an.</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Warum ist das der falsche Weg, wenn der eine Standard (hier C++) etwas nicht hergibt, einen anderen (hier C99) zu verwenden?</p>
</blockquote>
<p>Schon mal gehört, was ein C++ Kompiler ist? Der unterstützt den C++ Standard und keinen anderen Standard. Wenn er irgendetwas in der Richtung tut, dann sind das nicht portable Erweiterungen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847523</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Jan 2010 14:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 14:25:15 GMT]]></title><description><![CDATA[<p>Dirkyy schrieb:</p>
<blockquote>
<p>Welche Probleme könnten auftreten? Wie kann ich diese lösen?</p>
</blockquote>
<p>Schau mal bei Wiki nach Endianess, sollte man auch bedenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847535</guid><dc:creator><![CDATA[Badestrand_]]></dc:creator><pubDate>Sat, 30 Jan 2010 14:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 14:37:16 GMT]]></title><description><![CDATA[<blockquote>
<p>Der unterstützt den C++ Standard und keinen anderen Standard. Wenn er irgendetwas in der Richtung tut, dann sind das nicht portable Erweiterungen.</p>
</blockquote>
<p>Gut, dann gibt es nur eine Loesung: Es gibt keine Loesung in C++. Ansonsten: Diese Sachen einfach in einer C-Bibliothek kapseln, dafuer einen C-Compiler nutzen und dazulinken. Aber ich weiss grad nicht, ob der C++ Standard irgendwas uebers Linken aussagt ... Ich finde deine Argumentation zwar richtig, aber auch etwas engstirnig. Der Weg ueber stdint.h ist fuer mich der beste, wenn man exakte Groessen (nein, nicht 4 Byte oder mehr, sondern exakt 4 Byte) haben moechte. Was tun, wenn es auf 64 Bit Machinen keine 4 Byte gross ist und ich auf Bitoperationen vertraue, die nur fuer 4 Byte ausgelegt sind? ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847545</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 30 Jan 2010 14:37:16 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 15:39:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;cstring&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

int main() {
  char buf[4];
  std::cin.read(buf, sizeof(buf));
#ifdef CONVERT_ENDIAN
  std::reverse(buf, buf+sizeof(buf));
#endif
  std::size_t s;
  std::memcpy(reinterpret_cast&lt;char*&gt;(&amp;s)
#ifndef LITTLE_ENDIAN
              + sizeof(s)-sizeof(buf)
#endif
              , buf, sizeof(buf));
  std::cout &lt;&lt; s &lt;&lt; std::endl;
}
</code></pre>
<p>cstdint gibt es übrigens seit TR1 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#ifndef CPP0X
#include &lt;tr1/cstdint&gt;
using std::tr1::uint32_t;
#else
#include &lt;cstdint&gt;
using std::uint32_t;
#endif

int main() {
  uint32_t i;
  std::cin.read(reinterpret_cast&lt;char*&gt;(&amp;i), sizeof(i));
#ifdef CONVERT_ENDIAN
  std::reverse(reinterpret_cast&lt;char*&gt;(&amp;i),
               reinterpret_cast&lt;char*&gt;(&amp;i) + sizeof(i));
#endif
  std::cout &lt;&lt; i &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1847565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847565</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 30 Jan 2010 15:39:52 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 16:28:41 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Gut, dann gibt es nur eine Loesung: Es gibt keine Loesung in C++.</p>
</blockquote>
<p>Leider keine befriedigende, ja.</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Ansonsten: Diese Sachen einfach in einer C-Bibliothek kapseln, dafuer einen C-Compiler nutzen und dazulinken.</p>
</blockquote>
<p>Geht auch nicht. Wie willst du dann auf den Typ zugreifen?</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Ich finde deine Argumentation zwar richtig, aber auch etwas engstirnig.</p>
</blockquote>
<p>Naja, ich hebe nur den Finger. Du erzählst Dinge und setzt es so hin, als wenn sie portabel und überall korrekt wären, was schlicht und einfach nicht stimmt. Wenn du deine Lösungen mit Warnzeichen oder dem richtigen Kontext eingeschlossen hättest und auf die Probleme hingewiesen hättest, dann hätte ich nichts dagegen gesagt.</p>
<p>Es wurde nach einer portablen Lösung gefragt, was deine Lösungen allesamt nicht waren.</p>
<p>knivil schrieb:</p>
<blockquote>
<p>Der Weg ueber stdint.h ist fuer mich der beste, wenn man exakte Groessen (nein, nicht 4 Byte oder mehr, sondern exakt 4 Byte) haben moechte. Was tun, wenn es auf 64 Bit Machinen keine 4 Byte gross ist und ich auf Bitoperationen vertraue, die nur fuer 4 Byte ausgelegt sind? ...</p>
</blockquote>
<p>1. Du kannst mein präsentierter Code so umbauen, dass er die Überprüfung macht, ob es genau 4 Bytes sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
2. Man kann entsprechende Bit-Operationen durch AND-Bit-Operationen absichern. Mache ich fast immer, damit korrekt validiert wird.</p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>cstdint gibt es übrigens seit TR1</p>
</blockquote>
<p>Wusste ich nicht, danke für die Info! Wobei wenn ich weiterhin mit dem Finger weitermachen möchte: TR1 ist kein Standard, sondern nur ein Technical Report und muss nicht vorhanden sein, um dem C++ Standard 2003 zu genügen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>rüdiger schrieb:</p>
<blockquote>
<pre><code class="language-cpp">... /* convert endianess */ ...
</code></pre>
</blockquote>
<p>Und was ist bei Middle-Endian? *SCNR* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847611</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Jan 2010 16:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 17:21:34 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Wusste ich nicht, danke für die Info! Wobei wenn ich weiterhin mit dem Finger weitermachen möchte: TR1 ist kein Standard, sondern nur ein Technical Report und muss nicht vorhanden sein, um dem C++ Standard 2003 zu genügen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Der Op hat aber auch nichts von C++03 gesagt. Vielleicht sucht er ja eine portable Lösung für all seine C++0x Compiler :p. Vermutlich ist der eh geflohen und denkt wir sind alle verrückt :).</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>rüdiger schrieb:</p>
<blockquote>
<pre><code class="language-cpp">... /* convert endianess */ ...
</code></pre>
</blockquote>
<p>Und was ist bei Middle-Endian? *SCNR* <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Hmm, ich hätte eher gedacht, dass man sich darüber beschwert, wenn char keine 8 Bit hat :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847645</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 30 Jan 2010 17:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 17:48:31 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten <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>Es ist für mich natürlich nicht direkt notwendig, dass ich exakt den Typ <code>size_t</code> nutze. Ich kann also auch unsigned int schreiben oder einen anderen Typen, der diese Bedingungen erfüllt. Würde das einen Unterschied machen?</p>
<p>Der Grund für die 4 Byte-Limitierung ist ein Dateiformat, dass ich unterstützen will und dies leider voraussetzt. Auch Bit-Operationen werden später ausgeführt.</p>
<p>Die von Rüdiger vorgeschlagene Absicherung ist zwar ganz nett, aber wenn ich das Programm (in kompilierter) Form weitergebe, dann bringt sie nichts mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847664</guid><dc:creator><![CDATA[Dirkyy]]></dc:creator><pubDate>Sat, 30 Jan 2010 17:48:31 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 19:01:11 GMT]]></title><description><![CDATA[<p>Dirkyy schrieb:</p>
<blockquote>
<p>Es ist für mich natürlich nicht direkt notwendig, dass ich exakt den Typ <code>size_t</code> nutze. Ich kann also auch unsigned int schreiben oder einen anderen Typen, der diese Bedingungen erfüllt. Würde das einen Unterschied machen?</p>
</blockquote>
<p><code>unsigned int</code> würde nicht viel bringen, da auch <code>unsigned int</code> nicht genau definiert ist. Am besten setzt du auf <code>&lt;tr1/cstdint&gt;</code> oder auf den <a href="http://www.boost.org/doc/libs/1_41_0/libs/integer/cstdint.htm" rel="nofollow">Boost Header</a>. Auch wenn sie nicht ganz portabel sind.</p>
<p>Dirkyy schrieb:</p>
<blockquote>
<p>Die von Rüdiger vorgeschlagene Absicherung ist zwar ganz nett, aber wenn ich das Programm (in kompilierter) Form weitergebe, dann bringt sie nichts mehr.</p>
</blockquote>
<p>1. Rüdiger hat nur eine zusätzliche Methode präsentiert, wie man es einlesen könnte. Zudem hat er gezeigt, wie man mit Little- und Big-Endian umgehen kannt. Eine Absicherung hast du dort nicht.<br />
2. In kompilierter Form ändern sich die Grössen nicht mehr. Wenn der Kompiler gesagt hat, dass ein <code>std::size_t</code> 4 Bytes ist, dann wird das so in Assembler/Maschinencode hingeschrieben und wird auch so bleiben.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847695</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Jan 2010 19:01:11 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 21:37:19 GMT]]></title><description><![CDATA[<p>Dirkyy schrieb:</p>
<blockquote>
<p>Die von Rüdiger vorgeschlagene Absicherung ist zwar ganz nett, aber wenn ich das Programm (in kompilierter) Form weitergebe, dann bringt sie nichts mehr.</p>
</blockquote>
<p>Warum das? Das zweite Beispiel benutzt doch einen Typ fester Größe. Beide Beispiele funktionieren unabhängig von der eigentlichen Größe von size_t.</p>
<p>Falls du die Endianess meinst: Wenn du auf einem System mit anderer Endianess arbeiten musst, dann musst du eh neu kompilieren.</p>
<p>Also beide Lösungen sollten funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847780</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Sat, 30 Jan 2010 21:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sat, 30 Jan 2010 22:45:44 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>Dirkyy schrieb:</p>
<blockquote>
<p>Die von Rüdiger vorgeschlagene Absicherung ist zwar ganz nett, aber wenn ich das Programm (in kompilierter) Form weitergebe, dann bringt sie nichts mehr.</p>
</blockquote>
<p>Warum das? Das zweite Beispiel benutzt doch einen Typ fester Größe. Beide Beispiele funktionieren unabhängig von der eigentlichen Größe von size_t.</p>
<p>Falls du die Endianess meinst: Wenn du auf einem System mit anderer Endianess arbeiten musst, dann musst du eh neu kompilieren.</p>
<p>Also beide Lösungen sollten funktionieren.</p>
</blockquote>
<p>Mein Fehler, tut mir leid <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>Könntest du mir noch etwas zur Funktionsweise deines Codes sagen? Was hat es mit der Funktion <code>std::memcpy</code> auf sich? Was wird dort wohin kopiert? Der Rest des Codes ist mir klar <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>Und kann ich die Idee dahinter auf andere (nicht portable) Typen auch anwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847825</guid><dc:creator><![CDATA[Dirkyy]]></dc:creator><pubDate>Sat, 30 Jan 2010 22:45:44 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität size_t on Sun, 31 Jan 2010 10:01:18 GMT]]></title><description><![CDATA[<p>Dirkyy schrieb:</p>
<blockquote>
<p>Hey,</p>
<p>wie portabel ist size_t? Ich muss ein 4 Byte großes size_t aus einer Datei (binär) laden.</p>
</blockquote>
<p>Binärdateien sind nicht portabel. Wenn es unbedingt ein Binärformat sein muß, dann muß man einen Header davorschreiben, in dem beschrieben ist, wie das Format aufgebaut ist. Bei den verbreiteten Plattformen hast Du vier verschiedene Formate für size_t: 32Bit und 64Bit sowie Big und Little Endian.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1847915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1847915</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Sun, 31 Jan 2010 10:01:18 GMT</pubDate></item></channel></rss>