Uint8 t (C-Datentyp): Unterschied zwischen den Versionen

Aus dev.kaibel.net
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „= uint8_t (C-Datentyp) = Der Datentyp '''uint8_t''' ist ein standardisierter Ganzzahltyp aus der C-Standardbibliothek <code><stdint.h></code>. Er wurde mit dem C99-Standard eingeführt und steht für einen **genau 8 Bit breiten, vorzeichenlosen Integerwert**. --- == Bedeutung == <syntaxhighlight lang="c"> #include <stdint.h> uint8_t x; </syntaxhighlight> * '''u''' = unsigned (ohne Vorzeichen) * '''int''' = Ganzzahl * '''8_t''' = 8 Bit bre…“
 
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


Der Datentyp '''uint8_t''' ist ein standardisierter Ganzzahltyp aus der C-Standardbibliothek <code>&lt;stdint.h&gt;</code>.   
Der Datentyp '''uint8_t''' ist ein standardisierter Ganzzahltyp aus der C-Standardbibliothek <code>&lt;stdint.h&gt;</code>.   
Er wurde mit dem C99-Standard eingeführt und steht für einen **genau 8 Bit breiten, vorzeichenlosen Integerwert**.
Er wurde mit dem C99-Standard eingeführt und steht für einen ''genau 8 Bit breiten, vorzeichenlosen Integerwert''.


---
---
Zeile 17: Zeile 17:
* '''8_t''' = 8 Bit breit (Typ-Suffix für definierte Bitbreite)
* '''8_t''' = 8 Bit breit (Typ-Suffix für definierte Bitbreite)


Damit garantiert <code>uint8_t</code> auf jeder Plattform eine **exakt 8 Bit (1 Byte)** große Ganzzahl – unabhängig von Architektur oder Compiler.
Damit garantiert <code>uint8_t</code> auf jeder Plattform eine ''exakt 8 Bit (1 Byte)'' große Ganzzahl – unabhängig von Architektur oder Compiler.


---
---
Zeile 31: Zeile 31:


== Vergleich zu anderen Ganzzahltypen ==
== Vergleich zu anderen Ganzzahltypen ==
| Typ | Größe (Bits) | Bereich | Vorzeichen | Header |
|------|---------------|----------|-------------|---------|
| `int8_t` | 8 | −128 … 127 | ja | `<stdint.h>` |
| `uint8_t` | 8 | 0 … 255 | nein | `<stdint.h>` |
| `uint16_t` | 16 | 0 … 65.535 | nein | `<stdint.h>` |
| `uint32_t` | 32 | 0 … 4.294.967.295 | nein | `<stdint.h>` |
| `uint64_t` | 64 | 0 … 18.446.744.073.709.551.615 | nein | `<stdint.h>` |


---
{| class="wikitable"
! Typ !! Größe (Bits) !! Bereich !! Vorzeichen !! Header
|-
| <code>int8_t</code>  || 8 || −128 … 127 || ja || <code><stdint.h></code>
|-
| <code>uint8_t</code>  || 8 || 0 … 255 || nein || <code><stdint.h></code>
|-
| <code>uint16_t</code> || 16 || 0 … 65.535 || nein || <code><stdint.h></code>
|-
| <code>uint32_t</code> || 32 || 0 … 4.294.967.295 || nein || <code><stdint.h></code>
|-
| <code>uint64_t</code> || 64 || 0 … 18.446.744.073.709.551.615 || nein || <code><stdint.h></code>
|}


== Zweck ==
== Zweck ==
Die Typen aus `<stdint.h>` wurden eingeführt, um:
Die Typen aus ''<stdint.h>'' wurden eingeführt, um:
* eine **portierbare Darstellung von Datentypen** zu gewährleisten,
* eine ''portierbare Darstellung von Datentypen'' zu gewährleisten,
* **feste Bitbreiten** für hardwarenahe oder netzwerkbezogene Programmierung zu definieren,
* ''feste Bitbreiten'' für hardwarenahe oder netzwerkbezogene Programmierung zu definieren,
* eine **klare Trennung zwischen signierten und unsignierten Werten** zu ermöglichen.
* eine ''klare Trennung zwischen signierten und unsignierten Werten'' zu ermöglichen.
 
---


== Beispiel ==
== Beispiel ==
Zeile 70: Zeile 73:
== Verwendung ==
== Verwendung ==
<code>uint8_t</code> wird häufig eingesetzt für:
<code>uint8_t</code> wird häufig eingesetzt für:
* **Byteweise Datenverarbeitung**
 
  <syntaxhighlight lang="c">
'''Byteweise Datenverarbeitung'''
<syntaxhighlight lang="c">
   uint8_t buffer[10];
   uint8_t buffer[10];
   buffer[0] = 0xFF;
   buffer[0] = 0xFF;
  </syntaxhighlight>
</syntaxhighlight>


* **Kommunikation mit Hardware-Registern** 
'''Kommunikation mit Hardware-Registern'''
  (z. B. in Mikrocontrollern oder Embedded-Systemen)
z. B. in Mikrocontrollern oder Embedded-Systemen
  <syntaxhighlight lang="c">
<syntaxhighlight lang="c">
   uint8_t port_value = read_register(PORTA);
   uint8_t port_value = read_register(PORTA);
  </syntaxhighlight>
</syntaxhighlight>


* **Netzwerk- und Protokollimplementierungen** 
'''Netzwerk- und Protokollimplementierungen'''
  (z. B. IP-Header, Checksummen)
z. B. IP-Header, Checksummen


* **Binäre Dateiverarbeitung**
'''Binäre Dateiverarbeitung'''
  <syntaxhighlight lang="c">
<syntaxhighlight lang="c">
   FILE* f = fopen("data.bin", "rb");
   FILE* f = fopen("data.bin", "rb");
   uint8_t byte;
   uint8_t byte;
   fread(&byte, sizeof(uint8_t), 1, f);
   fread(&byte, sizeof(uint8_t), 1, f);
   fclose(f);
   fclose(f);
  </syntaxhighlight>
</syntaxhighlight>
 
---


== Hinweise ==
== Hinweise ==
* Entspricht auf den meisten Plattformen dem Typ <code>unsigned char</code>,
* Entspricht auf den meisten Plattformen dem Typ <code>unsigned char</code>, aber mit garantierter Bitbreite (8 Bit).   
  aber mit garantierter Bitbreite (8 Bit).   
* Wird durch den C99-Standard bereitgestellt – ältere Compiler (< C99) kennen ihn ggf. nicht.   
* Wird durch den C99-Standard bereitgestellt – ältere Compiler (< C99) kennen ihn ggf. nicht.   
* Kann sicher mit Funktionen wie <code>printf()</code> und Formatzeichen <code>%u</code> ausgegeben werden (implizite Umwandlung zu int).
* Kann sicher mit Funktionen wie <code>printf()</code> und Formatzeichen <code>%u</code> ausgegeben werden (implizite Umwandlung zu int).

Aktuelle Version vom 3. November 2025, 15:03 Uhr

uint8_t (C-Datentyp)

Der Datentyp uint8_t ist ein standardisierter Ganzzahltyp aus der C-Standardbibliothek <stdint.h>. Er wurde mit dem C99-Standard eingeführt und steht für einen genau 8 Bit breiten, vorzeichenlosen Integerwert.

---

Bedeutung

#include <stdint.h>

uint8_t x;
  • u = unsigned (ohne Vorzeichen)
  • int = Ganzzahl
  • 8_t = 8 Bit breit (Typ-Suffix für definierte Bitbreite)

Damit garantiert uint8_t auf jeder Plattform eine exakt 8 Bit (1 Byte) große Ganzzahl – unabhängig von Architektur oder Compiler.

---

Wertebereich

0 bis 255

Dies ergibt sich aus 2⁸ möglichen Werten, da alle 8 Bits zur Darstellung positiver Zahlen verwendet werden.

---

Vergleich zu anderen Ganzzahltypen

Typ Größe (Bits) Bereich Vorzeichen Header
int8_t 8 −128 … 127 ja <stdint.h>
uint8_t 8 0 … 255 nein <stdint.h>
uint16_t 16 0 … 65.535 nein <stdint.h>
uint32_t 32 0 … 4.294.967.295 nein <stdint.h>
uint64_t 64 0 … 18.446.744.073.709.551.615 nein <stdint.h>

Zweck

Die Typen aus <stdint.h> wurden eingeführt, um:

  • eine portierbare Darstellung von Datentypen zu gewährleisten,
  • feste Bitbreiten für hardwarenahe oder netzwerkbezogene Programmierung zu definieren,
  • eine klare Trennung zwischen signierten und unsignierten Werten zu ermöglichen.

Beispiel

#include <stdio.h>
#include <stdint.h>

int main() {
    uint8_t a = 255;
    printf("Wert von a: %u\n", a);
    return 0;
}

Ausgabe:

Wert von a: 255

---

Verwendung

uint8_t wird häufig eingesetzt für:

Byteweise Datenverarbeitung

  uint8_t buffer[10];
  buffer[0] = 0xFF;

Kommunikation mit Hardware-Registern z. B. in Mikrocontrollern oder Embedded-Systemen

  uint8_t port_value = read_register(PORTA);

Netzwerk- und Protokollimplementierungen z. B. IP-Header, Checksummen

Binäre Dateiverarbeitung

  FILE* f = fopen("data.bin", "rb");
  uint8_t byte;
  fread(&byte, sizeof(uint8_t), 1, f);
  fclose(f);

Hinweise

  • Entspricht auf den meisten Plattformen dem Typ unsigned char, aber mit garantierter Bitbreite (8 Bit).
  • Wird durch den C99-Standard bereitgestellt – ältere Compiler (< C99) kennen ihn ggf. nicht.
  • Kann sicher mit Funktionen wie printf() und Formatzeichen %u ausgegeben werden (implizite Umwandlung zu int).

---

Verwandte Typen

  • int8_t – vorzeichenbehaftete 8-Bit-Ganzzahl
  • uint16_t – 16-Bit ohne Vorzeichen
  • uint32_t – 32-Bit ohne Vorzeichen
  • uint64_t – 64-Bit ohne Vorzeichen
  • stddef.h – allgemeine Standardtypen
  • stdint.h – Header-Datei für feste Breiten

---

Siehe auch

---

Quellen

  • ISO/IEC 9899:2018 (C18) – Programming Language C
  • The GNU C Library – Header `<stdint.h>`
  • Stevens, W. Richard: Advanced Programming in the UNIX Environment
  • Linux Man Pages: man stdint