Me gustaría enviar algunos números de coma flotante de doble precisión a través de la red. (estándar C, conectores estándar) No hay htond o ntohd para convertir los datos hacia y desde el orden de bytes de la red. ¿Que debería hacer? Tengo un par de soluciones en mi cabeza, pero me gustaría saber cuál es la práctica común.host a red doble?
(También me gustaría saber cuál es la práctica común para el envío de enteros de 64 bits, al igual que los valores utilizados por gint64 gstreamer)
edición: Esta es una solución pensé. Supongo que funciona para enteros de cualquier tamaño, pero ¿es correcto para los dobles?
void swap_if_necessary (void* buff, int buff_len)
{
uint32_t foo = 1;
if (htonl(foo) != foo)
{
char* to_swap = (char*)buff;
int i;
for (i = 0; i < buff_len/2; i++)
{
char swap_buff = to_swap[i];
to_swap[i] = to_swap[buff_len -1 -i];
to_swap[buff_len -1 -i] = swap_buff;
}
}
}
[Esta sección sobre Wikipedia] (http://en.wikipedia.org/wiki/Endianness#Floating-point_and_endianness) explica bien la situación. – hammar
¿No enviarías el número entero grande de 64 bits como todos los demás números enteros? ¿Cómo sería eso diferente a otros enteros? –
el problema es si debo convertirlo a big endian, o si hay alguna biblioteca que haga eso por mí. Los zócalos estándar bsd solo tienen funciones para enteros de 32 y 16 bits. –