[C] größeren Bytestrom erzeugen und übergeben

rohrbold

Mitglied
Hallo beisammen,

in einer Netzwerkanwendung müssen Pakete definiert gekapselt werden, also sowohl verpackt, als auch wieder entpackt werden. Die Struktur sieht etwa wie folgt aus: Ein Paket besteht aus einem Byte »type«, einem Byte »length« und dann einem variabel langem Feld »data«. In diesem Feld »data« können sich nun verschiedene Strukturen befinden, im einfachsten Fall ein 16 Bit Feld, im kompliziertesten sind es neun Byte, die nicht einmal günstig ausgerichtet sind (dreimal 8 Bit-Felder, danach dreimal 16-Bit Felder).
Mein Problem besteht jetzt darin, wie ich dieses Feld »data« geschickt erzeuge und an eine Funktion übergebe (also nur einen Zeiger darauf). Folgendes wäre ein Codefragment:
Code:
u8 parameters[2]; /* Anlegen von zwei Byte */
void *val = parameters;
/* [... hier tritt differenziertere Fallunterscheidung ein ...] */
switch (type) {
    case MTU:
        cap->omtu = cap->conf_mtu;
        len = 2;
        *((u16 *) val) = cap->omtu;
        break;
    case RFC:
        cap->omode = cap->conf_mode;
        cap->otxw = cap->conf_txw;
        cap->omaxt = cap->conf_maxt;
        cap->oret_to = cap->conf_ret_to;
        cap->omon_to = cap->conf_mon_to;
        cap->omps = cap->conf_mps;
        len = 9;
/* Hier sollte jetzt val in eine struct conf_rfc gecastet werden und dann
   mit den unten stehenden Werten gefüllt werden.
        val->mode = cap->omode;
        val->txw = cap->otxw;
        val->maxt = cap->omaxt;
        val->ret_to = cap->oret_to;
        val->mon_to = cap->omon_to;
        val->mps = cap->omps;
*/
        break;
}
add_conf_opt(conf_opts, val, type, len);
/* [...] */
Ich hoffe mein Problem kam dabei raus. Ich möchte an eine Funktion einen Byte-Block übergeben, der »beliebig« groß sein kann, also zumindest größer als 4 Byte, so dass ich meines Wissens eine Struktur dazu bemühen muss. Die aufgerufene Funktion erhält einen void Zeiger und die Länge des Bytestroms, kann anhand des Typs dann auch damit umgehen. Aber diesen Bytestrom »generisch« für unterschiedliche Typen zu erzeugen, gelingt mir irgendwie überhaupt nicht.
Hat jemand eine Idee?

EDIT: Das Thema ist ja ein einer völlig verkehrten Gruppe gelandet ... wie kommt das denn hier hin? Ich war in C/C++ und habe dort auf »Neues Thema erstellen« geklickt. Kann das ein Moderator vielleicht dorthin verschieben?
 
Zuletzt bearbeitet:
Zurück