Ich kann mir das gerade nur auf dem Handy ansehen, daher ist mein Blick getrübt.
Meinst Du
memcpy(&tmpval, buf+30, 4);
buf+30 ist das gleiche wie &buf[30]
memcpy kopiert Bytes. Erster Parameter ist Zieladresse, zweiter Source Adresse und dritter wieviele Bytes kopiert werden sollen.
Hier werden also 4 Byte aus buf beginnend ab pos 31 (C startet ja bei Index 0) in tmpval kopiert. Aus den nachfolgenden Zeilen sieht man das tmpval der Wert des Drucks ist. Folglich steht der Druck als 4 byte Wert in deinem Datenstrom ab Byte 31 (einschl).
(Temperatur folgt sofort dahinter auch als vier Byte).
Wegen beschränkter Handysicht nehme ich nur an das in buf der Datenstrom eingelesen wurde.
Mit Little oder Big Endian brauchst Du hier nicht zu kämpfen, da der Endian des Datenstroms gleich deinem Auswertecomputers ist. Sonst hätte man das mit memcpy und den darauf folgenden Zeilen nicht so machen können.