struct pointer auf array
-
Hallo,
ist es eigentlich möglich ein structpointer auf ein array zu setzen?Es geht um folgendes:
ich hab ein Arraychar info[5];
info hat hat die felder:[senderID|counter0|counter1|counter2|counter3]counter0123 stellen dabei einen int-counter dar.
counter0 ist der niederwertigste byte von counter und counter3 das höherwertigste byte von counter.Desweiteren habe ich ein struct:
typedef struct {
char senderID;
int counter;
}netInfo;Kann ich eigentlich ein pointer netInfo* myPointer auf das array setzen?
Es geht darum, dass die Information ja schon im Array vorliegt. Ich möchte an weiterer Stelle jedoch mit nem struct arbeiten. Um jetzt net unnötig speicher zu verschwenden, wollte ich daher fragen, ob das so einfach geht, dass man sowas in der Art macht:
netInfo* myPointer = info;
Ich habs mal ausprobiert. myPointer->senderID stimmt.
Aber irgendwie klappt das bei myPointer->counter nicht so ganz.counter3 wird irgendwie geschluckt und der wert stimmt net.Danke
-
Wenn du mit Bytes arbeitest, würde ich statt "int counter;" "unsigned int counter;" verwenden. Vielleicht hilft das schon.
-
Klingt für mich als würde eine
union
interessant sein? So oder so musst du die byteorder deines Systems betrachten. Bei little endian (z.B. x86, x64) sollte es, so wie du beschrieben, kein Problem geben.
-
void main() { char info[8]={1,0,0,0,1,1,0,0}; netInfo *p = info; printf("%d %d",p->senderID, p->counter); }
Macht das was du haben willst. Die letzten 4Byte sind dein counter.
Ich vermute, dass struct auch für char einen int im Speicher reserviert?
-
Oh mann, total das alignment verpeilt. Wahrscheinlich wird die Struktur 8 bytes groß sein. Dadurch kannst du das nicht so einfach "mappen". Ich wette sizeof(netInfo) ist 8?
-
Um das Alignement zu umgehen kann man structs auch packen. (#pragma pack)
Wenn das nicht geht, probier mal:typedef struct { char dummy0, dummy1, dummy2; char senderID; int counter; }netInfo;
netInfo* myPointer = &(info->senderID);