:o :o :o :o ... e per quale motivo visto che fanno parte dello standard 'C' fin dalla sua nascita?
Sono il sistema più pulito per fare quello che deve fare ... altro che casting e puntatori ... che poi capiti su architetture che memorizzano i dati diversamente e non ti funziona più nulla!
Dal Kernighan & Ritchie, capitolo 6.8:
A union is a variable that may hold (at different times) objects of different types and sizes, with the compiler keeping track of size and alignment requirements. Unions provide a way to manipulate different kinds of data in a single area of storage, without embedding any machine-dependent information in the program. They are analogous to variant records in pascal.
Dottarduino:
Utilizzando la bozza postata, diverse volte ho ottenuto il risultato sperato ma con il valore 35.0 ho qualche problema.
In esadecimale IEE754 mi diventa 0x42c00000 quando dovrebbe essere 0x420C0000.
Certo, perché la conversione con "String(mix.s.b4, HEX)" converte in esadecimale ma non aggiunge gli zeri iniziali. Tu vuoi poter avere sempre esattamente 2 caratteri hex (due nibble) per ogni byte, quindi ogni valore minore di 16 diventa un solo carattere, nel tuo caso il valore 12 viene convertito in "C" e non "0C" per cui quando concateni ti sballa il valore.
Tu poi vai a concatenare in fondo gli zeri se la stringa ha lunghezza inferiore a 6 caratteri, che non ha gran che senso...
Quindi per fare le cose corrette e per togliere di mezzo le String, potresti provare questo:
Dottarduino:
L'array lo posso ridurre a 10 oppure no?
No. Ogni stringa (array) deve avere una dimensione pari alla lunghezza massima della stringa più 1.
Quindi se vuoi comporre i 4 byte come coppie di digit esadecimali in una stringa che inizia con "0x" sono:
4 x 2 caratteri + 2 caratteri per "0x" + 1 = 11 caratteri