unsigned char (feld) zu int [c++]

  • hallo,

    also ich hab nen unsigned char feld, und will diesen in einen integer umwandeln (mit oder ohne vorzeichen, das ist egal)...
    wichtig ist, dass das char feld zweistellig ist, d.h. es sind zahlen von 0-99 dabei.


    die funktion atoi habe ich schon probiert, nur leider geht die bei unsigned char nicht :(


    hat mir jemand da nen tipp wie ich es doch hinbekomme?

  • äh du hast einen

    Code
    unsigned char feld;

    und willst einen integer?....

    Code
    int x = (int)feld;

    hm? -.-

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • Weil du von atoi sprichst: Meinst du mit "Feld" ein Array (unsigned char feld[2]), d.h. ein Feld mit zwei Elementen, wobei jede Stelle eine Ziffer von '0'-'9' darstellt?

    Dieser Beispielcode funktioniert bei mir z.B. ohne Probleme (mit gcc -Wall:(

    C
    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main(int argc, char **argv) {
            unsigned char feld[2] = {'8', '0'};
            int i = atoi((char *)feld);
            printf("%d\n", i);
            return 0;
    }
  • Florian: Sollte man das char[] nicht mit \0 abschließen, bevor man es als char* behandelt? Die Manpage von atoi spricht von der "initial portion of the string", daher funktioniert es wahrscheinlich so, wie du es gemacht hast - außer es befindet sich hinter dem Array zufällig eine Zahl im Speicher - die wird dann mitkonvertiert! Das ist aber nur eine Vermutung.

    schläfer: Bitte um ein genaues Beispiel, bevor wir hier rumraten. Was hast du schon probiert, welche Fehler sind aufgetreten?

    Dipper dipper dii dipper dii dipper dii duuu

  • //edit

    ok, ja, stimmt

    Code
    unsigned char feld[] = "12";
    
    
        int feldZahl = atoi((char*)feld);
    
    
        cout << "feld ist: " << feldZahl;

    bzw wenn dein array nicht mit 0 abgeschlossen ist und du damit arbeiten musst, dann so hier:

    Code
    unsigned char feld[] = {'1', '2'};
    
    
        int feldZahl = (feld[0] - 48) + (feld[1] - 48) * 10;
    
    
        cout << "feld ist: " << feldZahl;

    und wenn die character in deinem uchar array keine chars sind also '1' sondern einfach nur 1 drin steht dann ohne das - 48 hinter jedem element

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • Florian: danke dir, dass ist exakt das was ich brauche :)

    ich hab das schon so ähnlich probiert, nur eben ohne einen reinterpret cast ... war wohl etwas spät, da der compiler mir genau diese meldung gebracht hat:hewa:


    Vevusio: diese methode habe ich mir eben gegoogelt, die geht allerdings etwas anders, und ist etwas umständlich im vergleich zu atoi...

    man muss immer von vorne mit dem stellenwert multiplizieren, und immer '0' abziehen, z.b.:

    int x=((feld[0]-'0')*10) + ((feld[1]-'0')*1) oder
    int x=((feld[0]-'0')*100) + ((feld[1]-'0')*10) + ((feld[2]-'0')*1) usw.

  • Florian: Sollte man das char[] nicht mit \0 abschließen, bevor man es als char* behandelt? Die Manpage von atoi spricht von der "initial portion of the string", daher funktioniert es wahrscheinlich so, wie du es gemacht hast - außer es befindet sich hinter dem Array zufällig eine Zahl im Speicher - die wird dann mitkonvertiert! Das ist aber nur eine Vermutung.

    Du hast natürlich Recht, einen String sollte man mit einem '\0'-Zeichen abschließen. Danke für den Hinweis! ;)

  • tag, ich wieder:engel:

    hab noch ne frage, und stelle sie direkt mal hier, hoffe das noch genug reinschauen:)

    also ich such ein ersatz für scanf in c++... ich will damit was beim einlesen casten, hier das bsp:

    Code
    char c;
     scanf("%i", &c);          // ich gebe 65 ein
     cout << c << endl;        // und bekomme "A" als ausgabe




    nun ist ja scanf nicht wirklich c++, wie kann ich das da verwirklichen?

    Code
    cin >> (int)c;



    funktioniert da leider net...



    €dit: also genauergesagt such ich einen ersatz für den befehl scanf, den trick mit der int temp kenne ich schon ( oder ist das die einzigste möglichkeit in c++? :(

    Code
    char c;
    int i;
    cin << i;                        // ich gebe 65 ein
    c=i;
    cout << c << endl;         // und bekomme "A" als ausgabe
  • äh naja... du könntest zb

    cstdlib brauchst du für string to long int und äh... ja, nen direkten weg das so zu machen wie du willst gibt es glaub ich nicht >.>

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • ich muss die variable so klein wie möglich wählen...

    da ich nur zahlen von -115 bis 120 habe, sollte ich wohl ne char nehmen (-127 bis 127) ...


    ich weiss eben nur nich ob scanf etwas in einem c++ code zu suchen hat...

    ich denk mal, dass c++ nicht schlechter wie c sein, also das es auch da ne möglichkeit gibt, beim einlesen zu casten...nur scheints laut google nicht so zu sein.

  • ich denk mal, dass c++ nicht schlechter wie c sein [wird]

    Uje, da hat wohl jemand noch nicht viel Erfahrung mit C++ :)

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Uje, da hat wohl jemand noch nicht viel Erfahrung mit C++ :)


    Die Meinungen zu diesem Thema sind kontrovers und wurden, wie du sicher noch gut in Erinnerung hast :shinner: schon in einem anderen Thread besprochen.

    "Egbert B. Gebstadter is the Egbert B. Gebstadter of indirect self-reference." - Egbert B. Gebstadter

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!