double (64bit) IEEE-754-1985 übertragen in zwei mal vier Byte



  • Hallo,

    bin mir nicht sicher, ob das hier das richtige Forum ist.
    Ich habe ein Protokoll, dass es mir erlaubt maximal 32bit (4 Bytes) in einem Paket auf die Reise zu schicken. Für doubles spezifiert das Protokoll zwei Pakete, in denen ein Double wie folgt zu übertragen ist:

    Double: 1 bit sign, 52-bit fraction, 11-bit exponent

    Erstes Paket:
    Double high: Most significant 32 bits of double precision floating-point value according to IEEE-754-1985

    Zweites Paket:
    Double low: Least significant 32 bits of double precision floating-point value according to IEEE-754-1985

    Ich habe das jetzt folgendermaßen gelöst, dass ich eine union auf einen double und zwei uint32_t mache, den double wert in die union schreibe, anschließend den ersten uint32_t heraushole, htonl() drauf mache, ihn auf die Reise schicke, und anschließend den zweiten.

    Auf Empfängerseite mache ich ein ntohl(), schreibe beide in die union und hole einen double wieder raus.

    Augenscheinlich funktioniert das, aber ist das
    1. legal
    2. entspricht das dem Protokoll

    Gibts dafür eine elegantere/sichere/portablere Möglichkeit?

    Gruß,
    Phil



  • Nanu, kennt denn niemand den IEEE-754 Standard?



  • Hat mit dem IEEE-754-Standard wenig zu tun, du musst lediglich dafür sorgen, dass die 64 Bit auf dem Zielrechner wieder in der selben Reihenfolge vorliegen. Ich würde mich nicht darauf verlassen, dass der erste 32-Bit-Wert in deiner Union der höherwertige Teil ist. Stattdessen kannst du den double-Wert nach int64_t casten und dir davon den höher-/niederwertigen Teil nehmen.


Anmelden zum Antworten