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 einint-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);