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?
unsigned char (feld) zu int [c++]
-
-
-
genau^^
aber casten geht da leider net, und atoi auch net -
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
-
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?
-
unsigned char feld[3] = {'8', '0', '\0' };
jetzt müßte es gehen -
//edit
ok, ja, stimmt
Codeunsigned 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:
Codeunsigned 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
-
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:
nun ist ja scanf nicht wirklich c++, wie kann ich das da verwirklichen?
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++?
-
äh naja... du könntest zb
Code
Alles anzeigen#include <cstdlib> .... const int lineLength = 80; char line[lineLength]; cin.getline((char*)line, lineLength); char c = strtol(line, 0, 10); cout << "Char is: " << c;
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 >.>
-
nuja^^
das ist dann noch mehr "umweg" alt mit integer variante...
habs aber schon fast geahnt, dass es so nicht läuft ... muss halt scanf bleiben:/ -
-
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++
-
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.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!