Was ist der Unterschied zwischen UInt8 und uint8_t

Lesezeit: 3 Minuten

Benutzeravatar von user1845029
Benutzer1845029

Was ist der Unterschied zwischen UInt8 und uint8_toder UInt16 und unit16_t?

Was bedeutet die _t implizieren?

  • _t = Plattformübergreifende Implementierung eines Standarddatentyps.

    – sgarizvi

    5. Juni 2013 um 10:27 Uhr

  • Ich finde _t steht für type und es ist eine Konvention, die auf Linux-Systemen und an vielen Stellen in verwendet wird C und C++ Standard. Der Unterschied zwischen Uint8 und uint8_t hängt von der Implementierung ab, aber normalerweise sind beide 8-Bit-Ganzzahlen ohne Vorzeichen. Ebenfalls uint8_t und uint16_t werden durch den C- (und möglicherweise C++-) Standard in definiert stdint.h Header, Uint8 und Uint16 sind meines Wissens nach nicht genormt.

    – jcxz

    5. Juni 2013 um 10:29 Uhr


In C99 wurden die verfügbaren grundlegenden Integer-Typen (die ohne _t) als unzureichend angesehen, da ihre tatsächlichen Größen auf verschiedenen Systemen variieren können.

Daher enthält der C99-Standard Definitionen mehrerer neuer Integer-Typen, um die Portabilität von Programmen zu verbessern. Die neuen Typen sind besonders nützlich in eingebetteten Umgebungen.

Alle neuen Typen werden mit einem _t angehängt und sind garantiert systemübergreifend einheitlich definiert.

Weitere Informationen finden Sie unter Abschnitt über Ganzzahltypen mit fester Breite des Wikipedia-Artikels über Stdint.

  • uint8_t und uint16_t sind tatsächlich Teil von C99. Allerdings war die Notwendigkeit fester Größen älter als C99, sodass verschiedene Codebasen mit dieser Notwendigkeit fertig wurden, indem sie ihre eigenen Typen bereitstellten. OS X definiert UInt8 und UInt16 in /usr/include/MacTypes.h.

    Benutzer557219

    5. Juni 2013 um 10:56 Uhr


  • „Alle neuen Typen werden mit einem _t angehängt und sind garantiert systemübergreifend einheitlich definiert.“ ist nicht wahr, es gibt (u)int_leastN_t und (u)int_fastN_t. Sie meinten nur die Typen mit fester Breite.

    – Daniel Fischer

    5. Juni 2013 um 11:20 Uhr

  • Eigentlich wollte ich nichts darüber sagen, dass ihre Größen auf allen Systemen gleich sind. Die tatsächlichen Größen sind, wie Sie bereits erwähnt haben, nur für Typen mit fester Breite (genaue Breite) garantiert einheitlich. Die Definitionen sind jedoch in allen Systemen gleich. Beispielsweise ist int_leastN_t als kleinster Typ definiert, der in der Implementierung verfügbar ist. Die Definition ist unabhängig vom System gleich.

    – vdbuilder

    5. Juni 2013 um 11:32 Uhr


Der Hauptunterschied besteht darin, dass die uintX_t Typen sind Standard-C, definiert durch C99 und später, während UIntX ist nicht. Dies hat Auswirkungen darauf, wie portabel der Code ist. Code verwenden uintX_t Typen können auf jedem Standard-C-Compiler ohne weitere Abhängigkeiten kompiliert werden. Code, der verwendet UIntX Andererseits müssen diese Typen entweder selbst definiert werden oder von einer Bibliothek oder einem Framework abhängen, das dies tut.

Ich glaube nicht, dass Objective-C als solches zusätzliche Integer-Typen definiert, aber es kann durchaus sein, dass Ihr Framework (Coacoa, OpenStep?) dies tut. Wenn Ihr Code außerhalb des Frameworks keinen Sinn ergibt, verwenden Sie das, was im Framework-Kontext idiomatisch ist. Versuchen Sie ansonsten, sich an die Standardtypen zu halten.

normalerweise werden sie als typedef-Datentypen verwendet. “_t” steht für einen typedef-Datentyp. Wir vergeben solche Namen, damit sie in der gesamten Datei oder großen Codebasis verwendet und leicht gelesen werden können.

*UInt8 und uint8_t – Char*

typedef unit8_t unsigned char

*UInt16 und unit16_t*

typedef unit16_t unsigned int (auf einem 16-Bit-Compiler)

1415430cookie-checkWas ist der Unterschied zwischen UInt8 und uint8_t

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy