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