Hex String in einen Int umzuwandeln



  • Hallo
    Ich bin auf der suche nach einer Möglichkeit einen Hex String in einen Int umzuwandeln
    z.B.
    String id = “A1“; // ist bereits vorhanden die variable wird fremd befüllt
    int i = xxxx(id); // ...



  • Was ist String?

    Bestimmt irgendwas proprietäres. 🙄
    Nimm besser std::string.

    Ich verschiebe diesen Thread ins C++ Forum, weil diese Frage erstmal nichts mit WinAPI zu tun hat.



  • strtol / wcstol / strtoul / wcstoul

    char const * str = ...
    char * endPtr = NULL;
    long l = strtol(str, &endptr, 16);
    if (endPtr == str ||   // keine Konvertierung möglich
        *endPtr != 0 ||    // ungültige Zeichen im String
         errno == ERANGE)  // Überlauf
    {
      // ging nicht (so ganz)
    }
    


  • Was haben diese Funktionen im C++ Forum zu suchen?



  • "Compatibility
    strtol <stdlib.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP"

    oder auch
    http://www.google.com/search?q=strtol



  • Mag sein.
    Dann aber bitte im ANSI-C Forum und nicht im C++ Forum. 🙂

    Für C++ ist <stdlib.h> veraltet.



  • Oh bitte..
    dann halt #include <cstdlib> und std::strtol()

    Und wieso ist std::string besser als String?



  • Die Frage warum std::string besser als char * ist kannst Du Dir selbst beantworten wenn Du mal ein wenig mit spielst.

    Ansonsten versuch das mal so:

    #include <sstream>
    
    int main()
    {
    	std::stringstream t;
    //	t<<std::ios::hex;
    	t<<std::hex;
    	t.str("A1");
    	int i;
    	t>>i;
    
    }
    


  • peterchen schrieb:

    strtol / wcstol / strtoul / wcstoul

    char const * str = ...
    char * endPtr = NULL;
    long l = strtol(str, &endptr, 16);
    if (endPtr == str ||   // keine Konvertierung möglich
        *endPtr != 0 ||    // ungültige Zeichen im String
         errno == ERANGE)  // Überlauf
    {
      // ging nicht (so ganz)
    }
    

    *kotz*



  • Unregistrierte sollten nicht posten dürfen oder jederzeit fremdgecancelt werden. Ist ja zum heulen hier.



  • Warum? Ich hab doch recht. Das wird dir jeder C++'ler bestätigen können. 🤡



  • @Knuddlbaer:

    Wo ist deine Fehlerbehandlung? Wie kriegst du raus ob was schief gegangen ist - und was?

    und die Frage war ja auch -
    wieso ist std::string besser als String - von dem du und moddie gar nix wissen?



  • peterchen schrieb:

    @Knuddlbaer:
    Wo ist deine Fehlerbehandlung? Wie kriegst du raus ob was schief gegangen ist - und was?

    Du kannst z.B. die failbits verwenden

    peterchen schrieb:

    und die Frage war ja auch -
    wieso ist std::string besser als String - von dem du und moddie gar nix wissen?

    std::string -> standard -> portabel -> ... (wir sind im standard C++ Forum)



  • Hab 'ne Menge mit char * und mit std::string "gespielt", ich würde mich in Production Code in 80% aller Fälle für die <cstdlib> - Variante entscheiden

    Was ich mit den beiden Frage meinte war:

    a) Du weißt nichts über String. Vielleicht bietet die Klasse ja Services, die die Anwendung dringend benötigt. Vielleicht ist String ja sogar von std::string abgeleitet. Insofern ist ein pauschales "besser" m.E. nicht angebracht.

    b) Wenn du alle Fehlerbehandlung mit reinnimmst (die ich bis zum Schluß aufgeschlüsselt hab, weil der Nutzer das halt manchmal wissen muß), bläht sich der STL-Code auch auf.

    Was mich stört ist nicht, daß ein anderer Vorschlag gebracht wurde, sondern daß dieser Vorschlag als "besser" bezeichnet wurde, ohne Gründe anzugeben (und ich würde vermuten ohne wirklich nachzudenken, sondern weil "std::string besser ist als char const *").

    Mal ein paar Punkte die mir so einfallen:

    > NULL-Zeiger check fehlt bei mir, den kann man sich mit der STL sparen.

    > STL-Variante funktioniert auch für "exotische" chars,

    > Bei vergleichbarer implementation skaliert strtol besser als (oder im schlimmsten Fall genauso gut wie) stringstream.

    > Wie die STL-variante skaliert hängt letztlich von der STL-Implementation ab. Das heißt aber: Selbst wenn die Implementation auf der Ursprungsplatform akzeptabel ist, kann sie auf der Zielplattform untragbar sein. Sehe ich als leichte Einschränkung der Portierbarkeit.

    > strtol ist ohne Fehlerbehandlung ein Statement, die STL-Variante 3. Das glättet sich sicher etwas wenn man die Fehlerbehandlung mit reinnimmt, aber wenn ich mir anschau wieviel Dokumentation ich lesen muß, um die jeweilige Variante vollständig zu verstehen, hat die "klassische" variante einen klitzekleinen Vorsprung.

    > <cstdlib> ist meines Wissens Teil von Standard C++ 🙄

    Vielleicht wirkt das alles ein bißchen Überzogen, aber ich fand es leicht nervend, wenn

    a) cd verschiebt die Frage in ein passendes Forum. OK.
    b) Ich versuche eine funktionsfähige Antwort zu geben
    c) cd erklärt mir nicht etwa, das die Antwort falsch ist, sondern stellt nur fest daß sie "nicht in dieses Forum gehört". Bitte??
    d) von kb kommt ein konstruktiver Beitrag.
    e) bin hat einen Anfall von spätmorgendlicher Übelkeit. vergessen wir das.

    Da frag ich mich schon: Geht es hier darum, jemandem zu helfen, oder einen ausgewählten Teil des C++ - Standards zu bewachen?

    Soviel Dazu. Jetzt eß' ich erstmal ne leckere Feinfrostpizza.



  • Jetzt eß' ich erstmal ne leckere Feinfrostpizza.

    *kotz* 😃



  • peterchen schrieb:

    Vielleicht ist String ja sogar von std::string abgeleitet.

    Das wäre unklug da der Destruktor von std::string bekanntermaßen non-virtual ist.



  • Dann benutzt man String eben nicht polymorph. :p



  • Die Klasse String scheint sich im namespace System zu befinden. Zumindest ist sie bei .NET Teil des .NET-Framwork, dort enthält die mscorlib.dll die Einzelheiten zur Klasse String. Die Deklaration sieht laut dem Buch der .NET-IDE so aus:

    #using <mscorlib.dll>
    using namespace System;
    

    Und die 2. using-Zeile macht es wie hier wohl jeder weiß es nur einfacher bestimmte Klassen (bzw. .NET-Klasse) zu nutzen.

    Code-Hacker



  • Code-Hacker schrieb:

    Die Klasse String scheint sich im namespace System zu befinden. Zumindest ist sie bei .NET Teil des .NET-Framwork, dort enthält die mscorlib.dll die Einzelheiten zur Klasse String. Die Deklaration sieht laut dem Buch der .NET-IDE so aus:

    #using <mscorlib.dll>
    using namespace System;
    

    Und die 2. using-Zeile macht es wie hier wohl jeder weiß es nur einfacher bestimmte Klassen (bzw. .NET-Klasse) zu nutzen.

    Code-Hacker

    Das hat nix mit C++ zu tun, zumindest nicht mit dem (heiligen) Standard!!!
    Und .net, naja ich sag mal nix...

    Devil



  • devil81 schrieb:

    Das hat nix mit C++ zu tun, zumindest nicht mit dem (heiligen) Standard!!!
    Und .net, naja ich sag mal nix...

    Ach was du nicht sagst! Hier geht es doch um "String" statt "std::string" oder habe ich den falschen Thread erwischt? Und was .net anbelangt kannst du gerne sagen was du hast. mit .net kann man auch ohne .net programmieren. Wie gesagt so ist die String-Klasse im C++ Buch was bei der IDE dabei war von MS beschrieben. Und das "String" etwas mit dem Standard zu tun habe scheint nicht der fall zu sein, da ich es nirgends finden konnte.

    Code-Hacker


Anmelden zum Antworten