Convertir dato tipo long to byte y byte to long

Buenas Noches:
Después de varios días con este problema, por fin he conseguido resolverlo, es por lo que escribo este post, para que otro que se encuentre con el mismo problema lo tenga aquí ya resuelto y expuesto.

La solución la encontré en este post, en el foro de Arduino en inglés:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1243928827
por si ha alguien le interesa la versión original.

/* Funcion para descomponer y posteriormente recomponer un dato
tipo long en una matriz de datos tipo byte.

Ente V. S. 13/11/2010 para Arduino Forum Español
*/

byte descompuesto[4]; // matriz de datos descompuestos
long dato = 0; // Dato de ejemplo
long recompuesto ; // Dato recompuesto despues

void setup()
{
// No es necesario para esta aplicacion
}

void loop()
{
dato = millis(); // un dato long de ejemplo :slight_smile:

// funcion que lo descompone
descompuesto[0] = (byte) dato;
descompuesto[1] = (byte) (dato >> 8);
descompuesto[2] = (byte) (dato >> 16);
descompuesto[3] = (byte) (dato >> 24);

// funcion que lo recompone
long recompuesto = ((long )descompuesto[3]) << 24;
recompuesto |= ((long )descompuesto[2]) << 16;
recompuesto |= ((long )descompuesto[1]) << 8;
recompuesto |= descompuesto[0];
}

Ente V. S.

¿Probaste con union ?:

union { long l; byte b[4]; }u;

main() { long dato;

// Convertir long en 4 bytes u.l = millis(); serial.write(u.b[0]); serial.write(u.b[1]); serial.write(u.b[2]); serial.write(u.b[3]);

// 4 byte en long u.b[0] = serial.read(); u.b[1] = serial.read(); u.b[2] = serial.read(); u.b[3] = serial.read(); dato = u.l; }