byte[4] -> long - funktioniert nur bedingt.

Orestos:
Jemand eine Idee woran das liegen könnte?

Das liegt daran, dass Du es überhaupt mit Hin- und Herwandeln machst, was gar nicht notwendig ist, und Dich dann in den Datenstrukturen verhaspelst.

Ein "long" belegt doch schon vier Bytes im RAM-Speicher und wenn Du auf diese vier Bytes einzeln zugreifen können möchtest, brauchst Du nur eine passende Deklaration für ein Pointer auf byte, nutzbar als byte-Array ohne eigenen Speicher. Das so mittels Pointer-Deklaration erzeugte byte-Array beginnt an der Adresse der long-Variablen.

Und schon liegen die long-Variable "n" und das byte-Array "wert" vollkommen deckungsgleich im Speicher:
Änderst Du wert[0], wert[1], wert[2], wert[3], dann änderst Du n. Und umgekehrt.

Deklaration:

  unsigned long n=65336;
  byte* wert = (byte*) &n;

Wozu irgendwas fehlerträchtig wandeln, das schon im Speicher vorhanden ist?