Frage bezüglich htonl() und ntohl()



  • Hi Leute,

    also ich hab da eine Verständnisfrage bezüglich htonl() und ntohl():

    Diese Funktionen wandeln ja 16 und 32 Bit Ganzzahlen von Netzwerk- zu Hostbyteorder um, und zurück. Angenommen ich habe einen Receiver der via TCP Daten bekommt. Die Netzwerkbyteorder ist dann durch den Sender bestimmt. Woher "wissen" diese Funktionen ob die übergebenen Integer umgewandelt werden müssen?! Könnte ja sein das Netzwerk- und Hostbyteorder die selbe ist.

    Mein Problem ist nämlich, dass ich Pakete bekomme die 6 Byte große Werte enthalten. Auf einer 32 Bit Maschine kann ich daher ntohl() nicht nutzen, da die nur 32 Bit Werte nimmt, und nicht 64 Bit (für meine 48).

    Jetzt muss ich die Umwandlung von Hand vornehmen, aber woher weiß ich ob ich überhaupt umsortieren muss?

    Schonmal vielen Dank im voraus!



  • Du weißt es, weil Du es festgelegt hast. Du legst fest, dass alle Zahlen im Netzwerkverkehr in Network-Byte-Order übertragen werden. Dann musst Du natürlich auf allen Rechnern, die eine andere Byte-Order verwenden, umrechnen.

    Die Funktionen ntohs und htons machen übrigens nichts, wenn Host-Byte-Order und Network-Byte-Order identisch sind.



  • Oh man ja, ich depp hab übersehen das die Byteorder in der Paketspezifikation festgelegt wurde. Und ich war gerade etwas verwirrt...

    Danke für die schnelle Antwort. Hat sich damit erledigt.


Anmelden zum Antworten