我想通过网络发送一些双精度浮点数。 (标准C,标准套接字)没有htond或ntohd将数据转换为网络字节顺序和从网络字节顺序转换数据。我该怎么办?我有一些解决方案,但我想知道常用的做法。主机到网络双重?
(我也想知道什么是发送64位整数,就像使用的GStreamer值gint64常见的做法)
编辑: 这是一个解决方案,我想到的。我认为它适用于任何大小的整数,但对于双打是否正确?
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;
}
}
}
[此节在维基百科](http://en.wikipedia.org/wiki/Endianness#Floating-point_and_endianness)很好地解释了这种情况。 – hammar 2011-05-21 20:34:30
难道你只是发送像所有其他整数一样的64位整数大端?这将如何与其他整数不同? – 2011-05-21 21:11:57
问题是我应该把它转换成大端序列,还是有一些库为我做。标准的bsd套接字只有32位和16位整数的功能。 – 2011-05-21 21:16:44