host-zu-Netz doppelt?

Ich würde gerne einige double-precision-floating-point-zahlen über das Netzwerk. (standard C, standard-buchsen) Es gibt keine htond oder ntohd konvertieren der Daten in und aus der Netzwerk-byte-Reihenfolge. Was soll ich tun? Ich habe ein paar Lösungen in meinem Kopf, aber ich würde gerne wissen, was die gängige Praxis ist.

(Ich würde auch gerne wissen, was ist die gängige Praxis, zum versenden 64bit ints, wie gint64 Werten, die von gstreamer)

Bearbeiten:
Dies ist eine Lösung, die ich dachte. Ich vermute, es funktioniert für beliebig große ganze zahlen, aber ist es richtig für Doppel?

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;
        }  
    }
}
  • Dieser Abschnitt auf Wikipedia erklärt die Lage gut.
  • Würden Sie nicht einfach senden Sie die 64-bit integer big-endian-wie alle anderen ganzen zahlen? Wie wäre das anders als die anderen ganzen zahlen?
  • das problem ist, sollte ich es konvertieren zu big endian mich, oder gibt es da eine Bibliothek, die das tut für mich. Der standard-bsd-sockets, die nur Funktionen für die 32-und 16-bit-Integer.
  • GCC bietet __builtin_bswap64() - siehe gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
InformationsquelleAutor dec-vt100 | 2011-05-21
Schreibe einen Kommentar