sizeof(Uint8)

27/04/2008 - 21:00 von David Pritzkau | Report spam
Hallo!

Ich bin gelinde gesagt etwas verwirrt. In einem struct nimmt Uint8 vier
Bytes ein. Damit konnte ich mich anfreunden weil ich dachte, das es
vielleicht daran liegt, weil ich auf einem 32bit Kernel arbeite. Dieses
Element des struct muss ich jedoch einzeln ein- und auslesen aus einem
Puffer. Daher muss ich die genaue Lànge kennen. Jedoch gibt sizeof(Uint8)
zu meiner Verwunderung 1 aus. Was ist denn hier los?
In meinem Problem handelt es sich um den Pakettyp einer
Netzwerkübermittlung. Kann ich die wirkliche Speicherbelegung erfahren oder
sollte ich eine andere Möglichkeit wàhlen? Wenn letzteres, wie?

Pseudocode zur Veranschaulichung:

typedef struct myStruct {
Uint8 packettype;
Uint16 somemetadata;
} myStruct;

Uint8 packettype;
Uint8 *received_data = from_network_bla(...);
memcpy(&packettype, received_data, sizeof(Uint8)); // !!!

switch (packettype)
{
case PACKETTYPE_ONE:
// Das spezielle Paket erzeugen und den Rest
// der Daten da reinschütten
// ...
break;
case ...:
// ...
}

Grüße!
 

Lesen sie die antworten

#1 ram
27/04/2008 - 21:27 | Warnen spam
David Pritzkau writes:
Ich bin gelinde gesagt etwas verwirrt. In einem struct nimmt Uint8 vier



Meinst Du vielleicht ein »uint8«-Objekt?

Der Text »UintN« kommt in ISO/IEC 9899:1999 (E) nicht vor,
und »uintN« ist ein Typ. Typen nehmen keinen Platz ein,
Objekt nehmen Platz ein.

Pseudocode zur Veranschaulichung:



In Fragen besser ein Kompilett verwenden.

http://www.purl.org/stefan_ram/pub/kompilett

Ähnliche fragen