Это очень скучный способ простого преобразования четырех 8-битных байтов в 32-битный.
and
с 0xff
просто гарантирует, что используются только младшие 8 бит каждого значения (0xff == binary 11111111
).
Сдвиг битов (кратный 8) предназначен для того, чтобы каждый символ находился в правильном положении.
Все это можно заменить на что-то вроде:
unsigned long ltemp = (unsigned char)(analog_val_ptr[0] & 0xff);
ltemp = (ltemp << 8) | (unsigned char)(analog_val_ptr[1] & 0xff);
ltemp = (ltemp << 8) | (unsigned char)(analog_val_ptr[2] & 0xff);
ltemp = (ltemp << 8) | (unsigned char)(analog_val_ptr[3] & 0xff);
Или, альтернативно (и при условии, что они доступны), использовать правильные инструменты для работы, в частности htonl()
и ntohl()
.