Jak zarządzać łącznością podwójną z sieci

Mam duży problem z odpowiedzią na to pytanieZamień bity w c ++ na podwójne

Jednak to pytanie jest mniej więcej tym, czego szukam: otrzymuję podwójny sygnał z sieci i chcę go poprawnie zakodować w moim komputerze.


W przypadku, gdy otrzymamint Wykonuję ten kod za pomocąntohl :

int * piData = reinterpret_cast<int*>((void*)pData);

//manage endianness of incomming network data 
unsigned long ulValue = ntohl(*piData);
int iValue = static_cast<int>(ulValue);

Ale w takim przypadku otrzymamdouble, Nie wiem co robić.

Odpowiedź na pytanie sugeruje:

template <typename T>
void swap_endian(T& pX)
{
    char& raw = reinterpret_cast<char&>(pX);
    std::reverse(&raw, &raw + sizeof(T));
}

Jednak jeśli cytujęta strona:

The ntohl() function converts the unsigned integer netlong from network byte order to host byte order. When the two byte orders are different, this means the endian-ness of the data will be changed. When the two byte orders are the same, the data will not be changed.

Przeciwnie, odpowiedź @ GManNickG na pytaniezawsze robi inwersję zstd::reverse .

Czy mylę się, uznając, że ta odpowiedź jest fałszywa? (w zakresie zarządzania siecią endianess, z których korzystantohl sugerować, że nie zostało to dokładnie powiedziane w tytule pytania PO).

W końcu: Czy powinienem podzielić mojedouble na dwie części po 4 bajty i zastosujntohl funkcja na dwóch częściach? Czy jest więcej rozwiązań kanonicznych?

Jest też to interesujące pytanie w C,podwójny host do sieci?, ale ogranicza do wartości 32 bitów. A odpowiedź mówi, że debele powinny zostać przekonwertowane na łańcuchy ze względu na różnice w architekturze ... Będę też pracować z próbkami audio, czy naprawdę powinienem rozważyć konwersję wszystkich próbek na łańcuchy w mojej bazie danych? (dublety pochodzą z bazy danych, którą wysyłam przez sieć)

questionAnswers(3)

yourAnswerToTheQuestion