Covertieren eines ipstring in 4 octets



  • Hallo

    Was ich möchte ist ein string ala "172.16.0.2" in ein char array aus 4 byte zu convertieren.

    Int Convert(char *ipstr ,char arr[4])
    {
     Sscanf(ipstr ,"%i%i%i%i" ,&arr[0] ,&arr[1] ,&arr[2] ,&arr[3]);
    Return 0;
    }
    

    Kann man das so machen?



  • Converter schrieb:

    Kann man das so machen?

    Nein, denn %i erwartet eine Adresse von einem int.
    Also erst in 4 temporäre ints lesen.
    Und ich sehe die Trennungspunkte gar nicht.



  • Ok alles klar danke. "%i.%i.%i.%i" ist der formatstring richtig?


  • Mod

    Es gibt für %i auch noch den brandneuen Längenspezifizierer hh, aus dem C-Standard von 1999 (von Microsoft natürlich nicht umgesetzt, aber von jedem sonst), der dann in signed char speichert (also insgesamt "%hhi"). Womit wir auch zwei weitere Fehler entdecken:
    1. %i liest mit Vorzeichen, %u wäre wohl angebrachter (dafür gibt's den gleichen Längenspezifizierer, der dann in unsigned char speichert).
    2. char ist der falsche Datentyp. char ist für Zeichen. signed char und unsigned char sind dafür da, wenn du bytegroße Zahlen speichern möchtest. Mag technisch gesehen zwar das gleiche dahinter stecken, aber: 1. Ist dir garantiert, welches Vorzeichen du bekommst. 2. funktioniert das dann bei der Ein- und Ausgabe besser, wie du hier schon siehst. Denn die Funktionen für char arbeiten mit Buchstaben, die Funktionen für (un)signed char mit einer Zifferndarstellung für Zahlen.



  • Man sollte sich auch bei %i überlegen, ob man wirklich Oktalwerte eingeben möchte.
    "172.016.000.002" ergibt bei %i etwas anderes als bei %d, bzw. %u


Anmelden zum Antworten