LINUX.ORG.RU

htonl и ntohl для signed long


0

0

есть вопрос по сабжу. каким образом реализовать приведение к сетевому типу знаковых чисел?

тупой вызов htonl() и ntohl() приводит к беззнаковым с большими циферками вместо отрицательных.

если делать (signed long)ntohl(...) - то при моем диапазоне значений всегда получаются отрицательные значения.

кто чего подскажет?


Ответ на: комментарий от iero

УПД. если кому пригодится: на посыле ничего приводить не нужно. можно делать

htonl( signed )

на приеме достаточно

(signed long)ntohl( ... )

iero
() автор топика

попробуй так:

signed long my_signed_htonl(signed long value)
{
  unsigned long l = *reinterpret_cast<unsigned long *>(&value);
  l = htonl(l);
  return *reinterpret_cast<signed long *>(&l);
}

signed long my_signed_ntohl(signed long value)
{
  unsigned long l = *reinterpret_cast<unsigned long *>(&value);
  l = ntohl(l);
  return *reinterpret_cast<signed long *>(&l);
}

stpg
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.