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ć)