Очевидно (все эти определения в верхнем регистре затрудняют чтение), функции меняют внутренний порядок байтов значений, которые занимают 2 или 4 байта.Например:
UTIL_htons(0x1234); /* returns 0x3412 */
UTIL_htonl(0x12345678); /* returns 0x78563412 */
Я понятия не имею, как написать их в Delphi ...
Надеюсь, они уже написаны, и библиотека, используемая Delphi, имеет их с тем или иным именем.Проверьте свою документацию.
Редактировать
nResult = ( (pBuffer[ 0 ] << 8) & 0xFF00 ) | ( pBuffer[ 1 ] & 0x00FF );
в этой строке
pBuffer[0]
- первый элемент массива pBuffer
pBuffer[0] << 8
сдвигает это значение на 8 бит влево (0x12 становится 0x1200)
(...) & 0xFF00
является избыточным: сбрасывает самые правые 8 бит
В pBuffer[1] & 0x00FF
сохраняются только самые правые 8 бит (поэтому 0x1234становится 0x0034)
Другая операция |
является побитовой или
( ... & 0xFF00) | ( ... & 0xFF00)
- самые левые 8 битов первой части и самые правые 8 битов второй части.
Редактировать: hto * / * toh naming
Функции htonl
, htons
, ntohl
, ntohs
в C используются для преобразования значений между хостом и сетевым порядком байтов.
Порядок следования байтов не обязательно отличается (порядок байтов в сети имеет порядок с прямым порядком байтов), поэтому перед выполнением перестановок первая часть функций должна проверять, является ли порядок байтов в узле хоста прямым или младшим... или проверка была сделана ранее в программе, которая использует опубликованные вами функции.