Originariamente inviato da LeleFT
codice:
union mioByte {
int A;
char a0;
char a1;
} miaVar;
// Assegno il mio int
miaVar.A = <valore intro>;
printf("Primo byte (primi 8 bit): %d\n", miaVar.a0);
printf("Secondo byte (secondi 8 bit): %d\n", miaVar.a1);
Credo che il tuo codice sia sbagliato, prima di tutto perchè nella union sia a0 cha a1 condividono la stessa area di memoria!!
Più corretto sarebbe:
codice:
union mioByte {
int A;
struct {
char a0;
char a1;
};
} miaVar;
// Assegno il mio int
miaVar.A = <valore intro>;
printf("Primo byte (primi 8 bit): %d\n", miaVar.a0);
printf("Secondo byte (secondi 8 bit): %d\n", miaVar.a1);
Un'altra cosa è che un char è a 1 byte(8 bit), mentre nei sistemi a 32 bit + diffusi uni int è a 4 byte (32 bit).
Quindi servirebbero almeno 4 campi nella struct.
Un'altro sistema, + flessibile cross-platform, è risolverlo per via matematica.
(Cross-platform significa che quando avremo computer a 512 bit questo codice funzionerà ancora )
Ho messo tutte le variabili come unsigned per rendere + chiari i risultati.
Ecco il codice:
codice:
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
// 32 bit solitamente
unsigned int intero;
intero = 123456789;
cout << "La variabile intera contiane il valore di " << intero << ".\n";
cout << "Occupa " << sizeof(intero) << " byte, cioe' " << sizeof(intero) * 8 << " bit.\n";
// Array di tipo char, con numero di elementi = ai byte occupari dall' intero
unsigned char bytes[sizeof(intero)];
// contatore
int i;
// Copia del numero di partenza
unsigned int copia_int = intero;
// Suddivide nei byte
for(i=sizeof(intero) - 1; i >= 0; i--)
{
bytes[i] = copia_int % 255;
copia_int /= 255;
}
// Visualizza l'array
for(i=0; i<sizeof(intero); i++)
cout << "Byte numero " << i + 1 << ":\t" << unsigned int(bytes[i]) << endl;
}
Se avete domande, non esitate! :metallica