ip adresse als string umwandeln in ein hexwert



  • moin leute

    hat jemand ne gute idee wie man eine ipadresse netzmaske gateway etc pp. die als string gespeichert ist in einen hex wert umwandelt? und das ohne zusätzliche libarys einzubinden? also die ip kommt als char array daher mit 192.168.1.44 und soll direkt als 0xCAFF... ( der wert stimmt nicht 😉 ) rauskommen.

    kleine funktion 😉 und keine fertigen funktionen verwenden oder angeben bitte!

    gruß



  • xPCSIM schrieb:

    und keine fertigen funktionen verwenden

    Ist die C-Standardlibrary erlaubt?

    Sonst geht das mit etwas + - und * (oder auch noch | und << )



  • DirkB schrieb:

    xPCSIM schrieb:

    und keine fertigen funktionen verwenden

    Ist die C-Standardlibrary erlaubt?

    Sonst geht das mit etwas + - und * (oder auch noch | und << )

    ja logisch also #include <stdio.h> 😉

    blos halt nicht noch mehr neuere einbinden 😉



  • In der stdlib.h sind auch Funktionen zum Umwandeln von Ziffernfolgen.

    Aber sscanf ist wohl am einfachsten zu benutzen.



  • Das ist nun keine Raketenwissenschaft aber du scheinst es zu bevorzugen wenn Andere die Arbeit für dich erledigen.

    So wird das nix werden mit dem Programmieren.



  • xPCSIM schrieb:

    kleine funktion 😉 und keine fertigen funktionen verwenden oder angeben bitte!

    heisst: wir sollen deine hausaufgaben machen.
    👎



  • Was kommt als Nächstes?

    Ich muss zwei Zahlen sortieren - kleine funktion 😉 und keine fertigen funktionen verwenden oder angeben bitte!



  • Mein Gott, jetzt stellt euch doch nicht so an ... sind doch bloß ein paar Zeilen 👎

    long unsigned ip_from_string(char const *q)
    {
    	long unsigned a[0x3]={0x0};char *p=q;while(*p++)if(0x2e==*p)
    	++0x1[a];else if(*p&&(0x1|0x30&*p)==0x30)return 0x0;if(0x1[a
    	]^0x3||--p-q>0xf)return 0x0;for(0x1[a]=0x1;--p>=q;*(0x1+a)=*
    	(0x1+a)?0x1[a]*0xa:0x1)if(*p==0x2e&&*(a+1)>0x3e8)return 0x0;
    	else if(*p==0x2e)0x1[a]^=*(0x1+a),0x2[a]+=0x8;else 0x0[a]+=(
    	*p-0x30)**(0x1+a)<<0x2[a];return 0x1[a],~*(0x2+a)**q,0x0[a];
    }
    

    // ne, rechteckig ist schöner



  • Hahaha, ich hab deine Funktion nicht komplett nachvollzogen, muss es aber auch nicht.
    Ich kann es mir aber lebhaft vorstellen:
    "Bitte Herr xPCSIM erklären sie doch ihren Kommilitonen mal ihre Funktion ip_from_string" - "Öhmmmm..." 🙂

    EDIT:
    Ich selber hätte es wahrscheinlich mit strrchr oder strchr oder sowas versucht.


  • Mod

    Swordfish schrieb:

    Mein Gott, jetzt stellt euch doch nicht so an ... sind doch bloß ein paar Zeilen 👎

    long unsigned ip_from_string(char const *q)
    {
    	long unsigned a[0x3]={0x0};char *p=q;while(*p++)if(0x2e==*p)
    	++0x1[a];else if(*p&&(0x1|0x30&*p)==0x30)return 0x0;if(0x1[a
    	]^0x3||--p-q>0xf)return 0x0;for(0x1[a]=0x1;--p>=q;*(0x1+a)=*
    	(0x1+a)?0x1[a]*0xa:0x1)if(*p==0x2e&&*(a+1)>0x3e8)return 0x0;
    	else if(*p==0x2e)0x1[a]^=*(0x1+a),0x2[a]+=0x8;else 0x0[a]+=(
    	*p-0x30)**(0x1+a)<<0x2[a];return 0x1[a],~*(0x2+a)**q,0x0[a];
    }
    

    // ne, rechteckig ist schöner

    Ich sehe, du hast viel gelernt. 👍

    Die ersten beiden Zeilen fand ich es noch harmlos, aber die for-Schleife und die Benutzung des Komma-Operators haben mich dann restlos überzeugt 😋 .



  • SeppJ schrieb:

    Ich sehe, du hast viel gelernt. 👍

    Nur von den besten 😉



  • Ach man darf ja "keine fertigen funktionen verwenden".
    Also würde ich mir mein strchr selber programmieren und bei der Gelegenheit auch gleich testen, ob mir nicht jemand ne IP wie "333.444.555.666" unterjubeln will. Port lassen wir erstmal weg. "333.444.555.666:66666" wäre für den Anfang zu heftig.



  • EOP schrieb:

    [...] auch gleich testen, ob mir nicht jemand ne IP wie "333.444.555.666" unterjubeln will.

    Stimmt, das ging in der Beta noch durch. Fixed:

    long unsigned ip_from_string(char const *q)
    {
        long unsigned a[0x3]={0x0};char *p=q;while(*p++)if(0x2e==*p)
        ++0x1[a];else if(*p&&(0x0[p]&~0x30)>0x09)return 0x0;if(0x1[a
        ]^0x3||--p-q>0xf)return 0x0;for(0x1[a]=0x1;--p>=q;*(0x1+a)=*
        (0x1+a)?0x1[a]*0xa:0x1)if(*p==0x2e&&*(a+1)>0x3e8)return 0x0;
        else if(!0x2e-0x0[p]&&*(0x0+a)>>0x2[a]&~0xff)return 0x0;else
        if(*p==0x2e)0x1[a]^=*(0x1+a),0x2[a]+=0x8;else 0x0[a]+=(p[0]-
        0x30)**(0x1+a)<<0x2[a];return !*p<~0x1?0x1[a]:0x2[a],0x0[a];
    }
    

    Jetzt sollten nur noch gültige IPs durchgehen. RTM würd ich sagen. 👍



  • Hab jetzt nicht getestet, ob "1.2..3" oder "1.2.3." oder "1.2.-3.4" oder "1.2.3.A" durchgehen würden - weil ich gar nix getestet hab.

    RTFM ist aber immer ein guter Anfang. 😉 👍

    Ich hab soviele RFCs gelesen - da wir dir schwindlig.

    Bis hin zu https://tools.ietf.org/html/rfc2324

    This document describes HTCPCP, a protocol for controlling, monitoring, and diagnosing coffee pots.

    🙂



  • EOP schrieb:

    RTFM [...]

    ? ➡ RTM



  • Swordfish schrieb:

    EOP schrieb:

    RTFM [...]

    ? ➡ RTM

    Hahaha, RTFM passt aber auch. 🙂



  • EOP schrieb:

    Hahaha, ich hab deine Funktion nicht komplett nachvollzogen, muss es aber auch nicht.
    Ich kann es mir aber lebhaft vorstellen:
    "Bitte Herr xPCSIM erklären sie doch ihren Kommilitonen mal ihre Funktion ip_from_string" - "Öhmmmm..." 🙂

    EDIT:
    Ich selber hätte es wahrscheinlich mit strrchr oder strchr oder sowas versucht.

    kommilitonen? wie alt seit ihr ? 20? man ihr profiliert auch ja hier ich hau mich weg. xD

    das der unterschied zwischen dir und mir .. ich geh nicht mehr zur schule 😉 und nein ich bin kein programmierer. wenn ich mal sagen würd was ich hier den ganzen tag mach dann wärt ihr vielleicht nicht so herrablassend und arrogant 🙂 aber ist schon ok 🙂


  • Mod

    Es ist halt eine typische Hausaufgabe bzw. Übungsaufgabe. Da liegt der Gedanke schon nahe, dass der Fragesteller irgendwie Schüler oder Student ist. Ganz besonders wegen der Anforderung, dass das Ganze ohne vorgefertigte Funktionen zu erfolgen hat*. Manchmal liegt man mit solchen Einschätzungen eben falsch.

    *: Wieso ist diese Anforderung da, wenn das keine Hausaufgabe ist?



  • Wenn das keine Hausaufgabe ist dann fress ich doch glatt ein haariges Kehrgerät.

    Nicht alle Forum-members sind mehrfach auf dem Kopf aufgeschlagen.
    Siehe Swordfish - er kann das Ganze auch noch sexy formatieren.

    Und natürlich:
    Sorry wenn ich deinen Job als Gehirnchirurg nicht sofort nach deinem ersten post erkannt habe.



  • xPCSIM schrieb:

    das der unterschied zwischen dir und mir .. ich geh nicht mehr zur schule 😉 und nein ich bin kein programmierer. wenn ich mal sagen würd was ich hier den ganzen tag mach dann wärt ihr vielleicht nicht so herrablassend und arrogant 🙂 aber ist schon ok 🙂

    Oh ja doch, bitte, erleuchte uns!

    Was ist dein streng geheimes modbus Projekt an dem du arbeitest, und für was braucht du eine "standalone" Implementierung von inet_addr ?


Log in to reply