in byte zerlegen und wieder herstellen

Es reicht nicht, daß die linke Seite groß genug ist um das Ergebnis aufzunehmen. Die rechte Seite muß auch schon mit unsigned long int rechnen. D.h. ich würde an Deiner Stelle die Bytes vor dem Shift mit (unsigned long int) casten.