Robert B.: C Pointerei

Beitrag lesen

Moin,

Das kann C auch: Im Header arpa/inet.h findest du ntohs & Co, die für dich „das Denken übernehmen“:

Ne, da muss ich schon selbst aktiv werden, das Denken nimmt mir da htons() gar nicht ab.

Doch.

Also den Code so schreiben, daß er entweder auf einer LE oder BE Architektur funktioniert.

Nein.

Oder mit Bitoperationen arbeiten so wie ich das hier gemacht habe. Also händisch in die Byteorder eingreifen.

Nein.

Beispiel ntohs und htons:

  • ntohs stellt sicher, dass der in Network Byte Order vorliegende uint16_t-Wert anschließend in der für deinen aktuellen Host korrekten Byte Order vorliegt. Auf einem Big Endian-System muss dazu nichts weiter getan werden, der Wert wird durchgereicht, auf einem Little Endian-System findet ein Byte-Swapping statt. Ob du auf einem BE oder LE bist, braucht dich hier gar nicht zu kümmern, ntohs kümmert sich darum.
  • htons arbeitet genau anders herum: Von deiner Host Byte Order wird in die Network Byte Order übersetzt (LE → BE) oder der Wert einfach durchgereicht (BE → BE).

Viele Grüße
Robert