<?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 von Boost.Hash]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich verwende Boost.Functional/Hash in einem Projekt, das ich momentan von Windows auf Linux portiere. Dabei schreibe ich Hash-Werte in Dateien. Ich würde gerne Dateien auf Linux lesen können, die auf Windows geschrieben wurden.</p>
<p>Leider verwenden alle Hash-Funktionen von Boost <code>size_t</code> , was auf Windows 32 und auf Linux 64 Bit gross ist. Das finde ich eine ziemlich dumme Einschränkung, warum wurde hier <code>size_t</code> gewählt? Weil die Werte in Hash-Maps zur Indizierung verwendet werden? Ich bin sowieso kein Fan von intransparenten Typedefs wie <code>size_t</code> . Dauernd muss man casten, wenn man eine einheitliche Schnittstelle haben will...</p>
<p>Was bieten sich für Alternativen zur Hash-Berechnung an? Selbst schreiben? Boost-Code anpassen? Noch eine Bibliothek möchte ich eher nicht nehmen, es sei denn sie ist leichtgewichtig und header-only.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/312284/portabilität-von-boost-hash</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 15:38:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312284.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Dec 2012 12:02:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Mon, 31 Dec 2012 12:02:47 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich verwende Boost.Functional/Hash in einem Projekt, das ich momentan von Windows auf Linux portiere. Dabei schreibe ich Hash-Werte in Dateien. Ich würde gerne Dateien auf Linux lesen können, die auf Windows geschrieben wurden.</p>
<p>Leider verwenden alle Hash-Funktionen von Boost <code>size_t</code> , was auf Windows 32 und auf Linux 64 Bit gross ist. Das finde ich eine ziemlich dumme Einschränkung, warum wurde hier <code>size_t</code> gewählt? Weil die Werte in Hash-Maps zur Indizierung verwendet werden? Ich bin sowieso kein Fan von intransparenten Typedefs wie <code>size_t</code> . Dauernd muss man casten, wenn man eine einheitliche Schnittstelle haben will...</p>
<p>Was bieten sich für Alternativen zur Hash-Berechnung an? Selbst schreiben? Boost-Code anpassen? Noch eine Bibliothek möchte ich eher nicht nehmen, es sei denn sie ist leichtgewichtig und header-only.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2284720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2284720</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Dec 2012 12:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Mon, 31 Dec 2012 12:18:01 GMT]]></title><description><![CDATA[<p>Fast-Fix wäre wohl einfach eine 64bit .exe auf Windows zu erstellen. Welchen Compiler benutzt du? Mit VS 2012 sollte das kein Problem sein. Ansonsten halte ich das aber eh für keine gute Idee - wer garantiert dir denn, dass diese Hash Funktion immer gleich bleibt? Ich glaube nicht, dass das dazu gedacht ist, Daten abzuspeichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2284725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2284725</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Mon, 31 Dec 2012 12:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Mon, 31 Dec 2012 13:05:07 GMT]]></title><description><![CDATA[<p>Ja, Boost.Hash kann ich wohl nicht verwenden.</p>
<p>Da ich das ganze für einfache Checksummen benötige (nichts Kryptographisches), würde wahrscheinlich sogar sowas wie Adler-32 ausreichen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2284748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2284748</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Dec 2012 13:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Mon, 31 Dec 2012 13:16:34 GMT]]></title><description><![CDATA[<p>Falls Du die Daten (inkl. Hash) mit Boost.Serialization in die Files serialisierst, schafft ev. die folgende Header-Only Library abhilfe: <a href="http://epa.codeplex.com/" rel="nofollow">http://epa.codeplex.com/</a></p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2284753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2284753</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 31 Dec 2012 13:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Mon, 31 Dec 2012 14:12:00 GMT]]></title><description><![CDATA[<p>Momentan verwende ich nicht Boost.Serialization. Die Bibliothek werde ich mir aber merken, könnte sich mal nützlich erweisen. Danke, theta!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2284767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2284767</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Dec 2012 14:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Mon, 31 Dec 2012 15:31:32 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Leider verwenden alle Hash-Funktionen von Boost <code>size_t</code> , was auf Windows 32 und auf Linux 64 Bit gross ist. Das finde ich eine ziemlich dumme Einschränkung, warum wurde hier <code>size_t</code> gewählt? Weil die Werte in Hash-Maps zur Indizierung verwendet werden?</p>
</blockquote>
<p>Wofür denn sonst? Der Hash-Wert hat genau den Typ, den man auf der Plattform braucht.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Ich bin sowieso kein Fan von intransparenten Typedefs wie <code>size_t</code> . Dauernd muss man casten, wenn man eine einheitliche Schnittstelle haben will...</p>
</blockquote>
<p><code>size_t</code> gibt es, <em>damit</em> man einheitliche Schnittstellen hat.<br />
Dass du das Typsystem nicht verstanden hast, ist nicht die Schuld von C++ oder Boost.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Was bieten sich für Alternativen zur Hash-Berechnung an? Selbst schreiben? Boost-Code anpassen? Noch eine Bibliothek möchte ich eher nicht nehmen, es sei denn sie ist leichtgewichtig und header-only.</p>
</blockquote>
<p>Boost.CRC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2284804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2284804</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 31 Dec 2012 15:31:32 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Tue, 01 Jan 2013 13:40:54 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Wofür denn sonst?</p>
</blockquote>
<p>Schon mal dran gedacht, dass man Hashes auch ausserhalb von Hash-Maps verwenden kann? Aus irgendeinem Grund bietet Boost die Funktionalität wohl separat an.</p>
<p>TyRoXx schrieb:</p>
<blockquote>
<p><code>size_t</code> gibt es, <em>damit</em> man einheitliche Schnittstellen hat.<br />
Dass du das Typsystem nicht verstanden hast, ist nicht die Schuld von C++ oder Boost.</p>
</blockquote>
<p>Einheitlichkeit war die ursprüngliche Absicht von <code>size_t</code> , momentan siehts leider nicht immer so rosig aus. Für viele Fälle, wo man die Generizität nicht braucht, zahlt man einen hohen Preis. Das fängt bei <code>std::size_t</code> vs. <code>size_t</code> an. Beispiele für inkonsistente Schnittstellen, wo es jeweils um eine Anzahl Elemente geht:</p>
<ul>
<li><code>std::count()</code> gibt <code>std::ptrdiff_t</code> zurück.</li>
<li><code>std::map::count()</code> gibt <code>std::size_t</code> zurück.</li>
<li><code>std::vector::size()</code> gibt <code>std::size_t</code> zurück.</li>
<li><code>std::istream::read()</code> nimmt <code>std::streamsize</code> , obwohl das Ziel ein <code>std::vector&lt;char&gt;</code> sein kann. ( <code>streamsize</code> ist signed, aber der einzige Ort wo negative Werte verwendet werden, ist die deprecated <code>std::strstream</code> -Klasse).</li>
</ul>
<p>Dabei ist ausser Acht gelassen, dass die eigentlichen Rückgabetypen von den Iteratoren/Allokatoren abhängen. In ganz generischem Code müsste man also die Typedefs <code>difference_type</code> und <code>size_type</code> verwenden. Wenn man in eigenem Code Typen mit fester Grösse wie <code>std::uint32_t</code> braucht, muss man erneut casten.</p>
<p>Aber das liegt wohl alles daran, dass ich das C++-Typsystem nicht verstanden habe <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>TyRoXx schrieb:</p>
<blockquote>
<p>Boost.CRC</p>
</blockquote>
<p>Okay, danke für den Hinweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285014</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 01 Jan 2013 13:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to Portabilität von Boost.Hash on Tue, 01 Jan 2013 16:05:26 GMT]]></title><description><![CDATA[<p>Das ist etwas, worueber ich mir auch den Kopf zerbrochen hab. Gibt wohl keine schoene Loesung dafuer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2285047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2285047</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Tue, 01 Jan 2013 16:05:26 GMT</pubDate></item></channel></rss>