LINUX.ORG.RU

htonl и ntohl для signed long


0

0

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

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

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

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


Re: htonl и ntohl для signed long

hton*/ntoh* порядок байт только меняет. Ищи ошибку.

mv ★★★★★ ()
Ответ на: Re: htonl и ntohl для signed long от mv

Re: htonl и ntohl для signed long

ошибка там в касте signed/unsigned. вот и спрашивал совета ,может кто делал уже.

iero ()
Ответ на: Re: htonl и ntohl для signed long от iero

Re: htonl и ntohl для signed long

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

htonl( signed )

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

(signed long)ntohl( ... )

iero ()

Re: htonl и ntohl для signed long

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

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 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.