char array to int



  • Hallo zusammen,

    ich habe ein Problem und zwar ich möchte ein char array in int umwandlen ich benutze die zwei folgende funktionnen:

    char result[30]={0x84,0x37,0xfe,0x04,0xfc,0xfe,0x84,0x37,0xfc};
     string 	inetrm;
    		 stringstream ss;
    		 ss << result;
    		 ss>>inetrm;
    Hour =static_cast<int>(strtol(inetrm.substr( 6, 2).c_str(),NULL,16));
    				 Day  =static_cast<int>(strtol(inetrm.substr( 4, 2).c_str(),NULL,16));
    				 Month=static_cast<int>(strtol(inetrm.substr( 2, 2).c_str(),NULL,16));
    

    aber ich bekomme immer null

    das hier habe ich auch versuch :

    char man[2];
    man[1]={0x00};
    man[0] = result[3];
    int Year = atoi(man);
    

    die erste Variante hat glaube ich schon in einem anderen Programm funktionniert,
    warum ich jetzt immer 0 bekomme weißt ich nicht. Kann mir vielleicht jemand sagen was ich da falsch mache oder wie ich das anders machen kann ?

    danke

    Ryoban



  • Du gibst wenig Information zu deinem Problem an - welche Arrays, welche Deklarationen, wieso C-Style Arrays ?

    Angenommen du willst einfach ein char -Array in ein int -Array kopieren:

    Hier muss man sich im klaren sein, dass das zwei verschieden große Skalare sind. Einfach** std::memcpy() **verwenden wird also nicht das gewünschte Ergebnis bringen.

    Es gibt zum einen die Möglichkeit einfach von Anfang an einen STL-Container zu verwenden. Dann gibt es ganz einfach in jedem Container einen start-end Iteratorenpaar Konstruktor:

    std::vector<char> myChars;
    myChars.push_back('A');
    myChars.push_back('\a');
    
    std::vector<int> myIntArr(a.begin(), a.end());
    

    Das ist definitiv die beste Lösung. Sieh dir** std::vector **einfach einmal an.

    Zum Code:

    char result[30]={0x84,0x37,0xfe,0x04,0xfc,0xfe,0x84,0x37,0xfc}; 
     string     inetrm; 
             stringstream ss; 
             ss << result;
    

    Das geht schon in Zeile 4 nicht gut - du schreibst gerade mal die Adresse des ersten Arrayelementes in den Stringstream. Der Rest, da bin ich zu faul zum Analysieren.

    Wie dein Code funktionieren könnte:

    std::stringstream stream;
    
            char arr[]{'a', 'b', 'c', 'd'};
    
            std::copy(arr, arr + sizeof arr, std::ostream_iterator<int>(stream, " "));
    
            int ints[sizeof arr];
    
            std::copy(std::istream_iterator<int>(stream), std::istream_iterator<int>(), ints);
    

Anmelden zum Antworten