Einfacher Zugriff auf ein Array mit einer Hilfsstruktur

Gast #1032752
Lesenswert?

Hallo,
ich bekomme ein Telegramm als char-Array. In diesem Telegramm sind 
Anfragen mit einer bestimmten Struktur die z.B. so aussieht:
1
typedef struct {
2
    unsigned char type;
3
    unsigned char number;
4
    int length;
5
    int code;
6
} item_t;

Mein Telegramm ist ein Array z.B. so:
1
unsigned char telegram[512];

Wie setze ich ein Item z.B. Index 100 des Arrays, um dann über item.type 
auf diesen Wert einfacher zugreifen zu können?
Kann man das überhaupt so machen, also bezüglich alignment in 
Strukturen? Nicht dass das auf einer anderen Architektur nicht mehr 
funktioniert.
#1033030
Lesenswert?

1
typedef struct {
2
    unsigned char type;
3
    unsigned char number;
4
    int length;
5
    int code;
6
}item_t;
7

8
unsigned char telegram[512];
9

10
struct item_t *my_item; // structure Zeiger definieren
11
my_item = (struct *item_t)&telegram[17];
12
my_item->type = ...

Vorteil:
die Structure kann an einer beliebigen Stelle des Arrays anfangen, falls 
z.B. in einem Empfangsbuffer erst der Anfang gefunden werden muss.

Nachteil:
Der Zeiger benötigt 2 Bytes.
Gast #1033471
Lesenswert?

Danke für die Infos.

Ein sizeof() meiner Beispielstruktur von oben gibt ohne #pragma pack 12 
Bytes, mit pack 10 Bytes zurück. Also immer noch zu groß.

Ich habe jetzt die inttypes genommen, also:
1
#include <inttypes.h>
2

3
#pragma pack (1)
4
typedef struct {
5
    uint8_t type;
6
    uint8_t number;
7
    uint16_t length;
8
    uint16_t code;
9
} item_t;
10
#pragma pack (1)
Damit komme ich auf die gewünschten 6 Bytes.
Sollte dann doch auf jedem Prozessor funktionsfähig zu übersetzen sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren