IP string nach int



  • Weis vlt wer wie man eine IP addresse in c/c++ von einem string in eine u_int32_t konvertiert? Gibs da vlt bereits verfuegbare funktionen?



  • Kommt drauf an. Wie hältst du es mit Endian?

    Wenn network byte order ist, was du willst, gibt es auf den meisten Plattformen eine Funktion inet_addr oder (da inet_addr problematische Fehlerbehandlung hat) inet_aton. Ansonsten ist so etwas natürlich mit sscanf und ein paar Bitshifts schnell selbst zusammengehackt.



  • @seldon IP Adressen sind keine Zahlen, glaube nicht, dass man da irgendeine Endianess beachten sollte.



  • cooky451 schrieb:

    @seldon IP Adressen sind keine Zahlen, glaube nicht, dass man da irgendeine Endianess beachten sollte.

    IP Adressen sind Integer und in der Regel muss man die Endianess beachten, da die jeweilige Socket API die IP Adresse normalerweise in Network Byte Order (Big Endian) haben will...



  • dot schrieb:

    cooky451 schrieb:

    @seldon IP Adressen sind keine Zahlen, glaube nicht, dass man da irgendeine Endianess beachten sollte.

    IP Adressen sind Integer und in der Regel muss man die Endianess beachten, da die jeweilige Socket API die IP Adresse normalerweise in Network Byte Order (Big Endian) haben will...

    Oh nein, genau das darf man nicht mehr annehmen!

    Ja, eine IPv4 passt super in so einen 4 Byte Integer. Toll. Nur darf man heute annehmen, das der Code auch IPv6 kompatibel sein muss.
    Da bleiben dir dann die Optionen, es entweder als bytearray der Größe 4 oder 6 zu sehen, oder es als string zu verwenden.
    Manchmal hat man Glück, und die API, wie z.B. in boost::asio nimmt einem das ab.
    Aber wenn du selbst Daten mit IPs verknüpfen musst, solltest du heute keinen uint_32_t mehr dafür nehmen!

    phlox81



  • dot schrieb:

    IP Adressen sind Integer und in der Regel muss man die Endianess beachten, da die jeweilige Socket API die IP Adresse normalerweise in Network Byte Order (Big Endian) haben will...

    Eben genau deshalb _nicht_ beachten. Weil sie eben immer in Big Endian Format vorliegt. Man bekommt sie quasi immer so, und muss auch immer so mit ihr arbeiten.



  • Freaky123 schrieb:

    Weis vlt wer wie man eine IP addresse in c/c++ von einem string in eine u_int32_t konvertiert? Gibs da vlt bereits verfuegbare funktionen?

    Schau, ob Du POSIX' inet_pton() zur Verfügung hast.

    Caveat: inet_pron


Anmelden zum Antworten