Kiffliges Problem
-
Hi,
hab ein Problem, dass wirklich ein wenig außergewöhlich ist.
Folgendes:
Ich habe ein char const * in dem auf die chars verteilt der String 0x0200 steht.
Also 6 charakters mit, wie zu sehen ist, einem Hexwert.Nun will ich diesen String in eine Dezimalzahl, wandeln nur wie?
Nochmal der Code:function(char const *pstr) { /* in pstr steht also (ptr[0])->0, (pstr[1])->x usw. */ int zahl; zahl = atoi(pstr) --------> hier mein problem !!!! switch(zahl) { }
Ich hoffe es ist einigermaßen verständlich was das machen soll.
Bin dankbar für jede Idee
codeman
-
strtol()
-
Hi TactX,
hört sich gut an und macht wohl was ich will.
Nur ist mir der end-zeiger-zeiger nicht ganz klar was der macht.
Schau hier:#include <stdlib.h> long strtol(const char *begin, char **end, int base); Description: strtol() converts the initial portion of begin to “long int” representation. begin is a pointer to the beginning of the string. (Input) end is a pointer to the pointer to the first character after the converted string. (Input) base is the base of the number string. (Input)
Edit: Kann das sein das er den Konvertierten string dort ablegt wo der Zeiger end hinzeigt? Ich dachte die Konvertierung kommt als double zurück!!
codeman
-
codeman schrieb:
Edit: Kann das sein das er den Konvertierten string dort ablegt wo der Zeiger end hinzeigt? Ich dachte die Konvertierung kommt als double zurück!!
Double?
long int kommt raus.
Der char **endptr wird zur Fehlererkennung verwendet und kann (wie bestimmt in der manpage steht) NULL sein, wenn du auf Fehlererkennung verzichten kannst.
-
Jo klar, hab mich nur verschrieben mit dem Double
Habs geschnallt danke auch und schönes Wochenende, der Sommer naht
codeman
-
Nach der Überschrift habe ich schon gedacht es ginge ums kiffen
-
immigrant schrieb:
Nach der Überschrift habe ich schon gedacht es ginge ums kiffen
Hehe, ich konnte mir den Kommentar verkneifen
-
Hopps, ist unfreiwillig ein guter Versprecher geworden
-
Hi,
also ich habs mal mit strtol() probiert. Problem ist, bei mir kommt immer 0 raus.
Steht also in dem String 0x0302 dirn, bekomme ich nicht in dezimal 770, sondern 0.Ich hab keine Ahnung warum das so ist, vielleicht hat jemand ne Idee.
codeman
-
Alles klar habs!!!
Funktion strtol() bricht bei dem x der hexa defination 0x ab und liefert den bis dahin konvertierten Wert, der nun 0 ist. Schade auch das man das nicht so schreiben kann, da nun bei 0302 nicht mehr richtg ersichtlich ist das es sich um einen hexa Wert handelt. Aber thats it
codeman
-
codeman schrieb:
Alles klar habs!!!
Funktion strtol() bricht bei dem x der hexa defination 0x ab und liefert den bis dahin konvertierten Wert, der nun 0 ist. Schade auch das man das nicht so schreiben kann, da nun bei 0302 nicht mehr richtg ersichtlich ist das es sich um einen hexa Wert handelt. Aber thats it
codeman
Da sagt die manpage (man: strtol) aber was anderes.
strtol(foo,NULL,0);
Sollte eigentlich funktionieren...
-
The remainder of the string is converted to a long, long long, or
intmax_t, value in the obvious manner, stopping at the first character
which is not a valid digit in the given base. (In bases above 10, the
letter `A' in either upper or lower case represents 10, `B' represents
11, and so forth, with `Z' representing 35.)Scheint so zu sein, dass bei 0x das x als 33 interpretiert wird, wäre aber leider auch nicht richtig. Es soll ja lediglich den Wert als Hexa markieren, bzw. in Ansi schreibweise macht man es halt so.
Aber wenn du mir ein Beispiel bringen könntest wäre nett, denn ich würde es schon gerne einbauen.
Edit: Hab das gefunden
Für das Duale Zahlensystem sind die Zeichen 0 und 1 gültig, für das Zehnerzahlensystem die Zeichen 0 bis 9 und für das hexadezimale Zahlensystem dürfen Zeichen 0 bis 9 und A bis F verwendet werden.
Steht hier: http://www.goblack.de/desy/sc12chip/c/bibliothek/strtol.html
codeman
-
If base is zero or 16, the string may then include a `0x' prefix, and the number will be read in base 16;
test = strtol("0x0302",NULL,0); // funktioniert wunderbar
-
Ja haut einwandfrei hin!!!
Ich hatte noch netterweise einen Debuger laufen, und so hat das makefile das ausführbare cgi-script nicht neu überschrieben.
Manchmal kann eine ein Debug ein Segen, manchmal auch ein Fluch sein
Dank dir für deine Mühen,
codeman