Ich habe zwei vorzeichenlose Nummern mit je 32 Bits, die in einem einzigen Array gespeichert sind. Die erste Zahl ist in den Positionen [0; 3] und der zweite in Positionen [4; 8]. Ich jetzt was den Wert einer der Zahlen zu ändern, ist der folgende Code erlaubt/problematisch?Verwenden von uint32_t *, um den Wert des Arrays uint8_t zu ändern
uint8_t array[8];
//...Fill it up...
uint32_t *ptr = NULL;
ptr = (uint32_t*)&array[0];
*ptr = 12345;
ptr = (uint32_t*)&array[4];
*ptr = 54321;
ja, es ist problematisch http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule –
Sie verstoßen gegen die effektive Regel des Typs (auch als strikte Aliasing bezeichnet) Dies ist ein klares ** nicht **! Verwenden Sie Marshalling mit Bitshifts/masking – Olaf
kann man es auch andersherum machen: habe ein Array von 'uint32_t', das du mit den' uint32_t' Werten füllst. Du kannst dann dieses Array mit einem 'uint8_t *' (solange du nicht von der. gestört wirst Daten Präsentation). –