我想通過網絡發送一些雙精度浮點數。 (標準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