Integers plattformübergreifend
-
Wie greife ich plattformübergreifend auf signed und unsigned int 8-bit bis 64-bit zu? Beispielsweise scheint es nur unter Win möglich zu sein folgendes zu definieren:
typedef unsigned __int64 uint64_t;Hingegen kann man bei folgender Implementierung nicht sicher sein, dass es auch wirklich 8-bit sind:
typedef unsigned char uint8_t;Wie sieht es mit <inttypes.h> aus ? wäre das eine plattformübergreifende Lösung:
#ifndef TYPES_H_ #define TYPES_H_ #ifdef _MSC_VER // Signed integers typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; // Unsigned integers typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; #else #include <inttypes.h> #endif // _MSC_VER #endif // TYPES_H_Wenn möglich möchte ich erstmal keine Implementierung von Boost verwenden, falls es eine geben sollte.
-
Tomahawk schrieb:
Hingegen kann man bei folgender Implementierung nicht sicher sein, dass es auch wirklich 8-bit sind:
typedef unsigned char uint8_t;Das sind bloß mindestens 8 Bit.
Wie sieht es mit <inttypes.h> aus ? wäre das eine plattformübergreifende Lösung:
inttypes.h und stdint.h sind C99, die müssen nicht garantiert auf jeder Plattform vorhanden sein. Wenn sie da sind, sind sie eine gute Lösung.
#ifndef TYPES_H_ #define TYPES_H_ #ifdef _MSC_VER // Signed integers typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; // Unsigned integers typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; #else #include <inttypes.h> #endif // _MSC_VER #endif // TYPES_H_Das ist im Prinzip kein schlechter Ansatz. Du müsstest für jede Plattform alle wichtigen Makrodefinitionen raussuchen und dir die entsprechenden Typedefs ausdenken. Das wäre dann auf alle diese Plattformen portabel. Aber eine Menge Arbeit für dich.
Wenn möglich möchte ich erstmal keine Implementierung von Boost verwenden, falls es eine geben sollte.
Und dies würde dir diese Arbeit abnehmen (denn ja, das gibt es von boost). Wenn du so masochistisch veranlagt bist und du das aus Prinzip alles selber machen willst, ist das nicht mein Problem.
-
SeppJ schrieb:
Und dies würde dir diese Arbeit abnehmen (denn ja, das gibt es von boost). Wenn du so masochistisch veranlagt bist und du das aus Prinzip alles selber machen willst, ist das nicht mein Problem.
Nein es weniger Mascochismus als meine Dummheit
Habe es nicht fertig bekommen die Boost-Libraries unter Cygwin zu kompilieren. Bin schon froh, Cygwin und Eclipse zum laufen bekommen zu haben. Aber natürlich muss ich bei <boost/cstdint.hpp> sicher nichts compilieren, verschaffe mir aber weitere Anhängigkeiten, die ich nicht möchte.Gruss und danke!
-
Fast alles von Boost ist Header-only. Die Sachen die man compilieren muss, kann man an zwei Händen abzählen und sind allesamt optional.
-
Wenn man nicht alles aus boost haben will, kann man sich mit bcp auch den benötigten Teil extrahieren. Ich habe allerdings keine Ahnung, was bei
cstdintnoch an Zeugs mit angezogen wird. Am Besten: Ausprobieren.