Вы не можете сдвигать отрицательные числа влево, это вызывает неопределенное поведение: может произойти все что угодно.Аналогичным образом, смещение вправо отрицательных чисел также является плохой идеей, поскольку это может привести к арифметическому или логическому смещению вправо.
Вам необходимо привести переменную к типу без знака, сместить, а затем преобразовать обратно.Например:
d1 = ((uint32_t)BUF[1] << 8) ...