Hallo zusammen
Entweder bin ich dumm oder sonst was aber ich schaff es nicht in C aus einem char[20] string in dem eine HEX-Adresse steht diese auszulesen und als zahl(long) zu speichern. Vielen dank für eure Hilfe…
Gruss Markus
Hallo zusammen
Entweder bin ich dumm oder sonst was aber ich schaff es nicht in C aus einem char[20] string in dem eine HEX-Adresse steht diese auszulesen und als zahl(long) zu speichern. Vielen dank für eure Hilfe…
Gruss Markus
Hallo Markus
Was heisst genau du schaffst es nicht? Wie probierst du es? Was genau kriegst du für ein Resultat bzw. Fehlermeldung?
Kommt natürlich auch auf das OS bzw. die C-Variante an. Hast du sowas
wie eine Funktion atol?
Evt. hast du nulls in deinem String drin.
Bin auch nicht mehr so fit in C, aber vielleicht hats ja trotzdem geholfen.
Gruss, Bruno
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo zusammen
Entweder bin ich dumm oder sonst was aber ich schaff es nicht
in C aus einem char[20] string in dem eine HEX-Adresse steht
diese auszulesen und als zahl(long) zu speichern. Vielen dank
für eure Hilfe…Gruss Markus
Hallo Markus
Was heisst genau du schaffst es nicht? Wie probierst du es?
Ich habe hier 2 C-Bücher und versuche krampfhaft eine Lösung darin zu finden.
Was genau kriegst du für ein Resultat bzw. Fehlermeldung?
Noch nichts…
Kommt natürlich auch auf das OS bzw. die C-Variante an.
WinNT, MS Visual C++
Hast du sowas wie eine Funktion atol?
Funktion gibts und hilft mir glaub auch weiter!
Evt. hast du nulls in deinem String drin.
Nein hab ich nicht.
Bin auch nicht mehr so fit in C, aber vielleicht hats ja
trotzdem geholfen.
Ja danke aber falls jemand gerade einen schönen Beispielcode hat wäre ich froh darum!
Gruss Markus
aus der Kalten:
long longzahl;
char string[20]=„3E4C“;
sscanf(string, „%x“, &longzahl);
(http://docs.roxen.com/pike/7.0/tutorial/strings/ssca…)
eventuell unterstützt Dein sscanf auch „%D“
Mal sehen ob ich richtig geraten habe
Grüße
CMБ
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
falls jemand gerade einen schönen Beispielcode
hat wäre ich froh darum!
Also etwa wie folgt müsste es klappen:
#include (Compiler-abhängig, musst du im Handbuch nachlesen)
char zahl_als_char[20];
long zahl;
…
zahl = atol(zahl_als_char);
Der String muss natürlich nullterminiert sein und darf nur Ziffern oder Blanks und ein Vorzeichen enthalten.
Ansonsten: wie prüfst du, ob das rauskommt, was du erwartest? Evt. ist auch daran was faul.
Gruss, Bruno
Hi,
#include (Compiler-abhängig, musst du im
Handbuch nachlesen)char zahl_als_char[20];
long zahl;
…
zahl = atol(zahl_als_char);
OK,
char zahl\_als\_char[20]="DE45";
long zahl;
zahl = atol(zahl\_als\_char);
„zahl“ hat jetzt den Wert „0“, da die Hexadezimalzahl
als Dezimal oder als Text interpretiert wird.
Versuch mal:
#include
int main()
{
char puffer[80];
long zahl;
// adresse von main() in einen string-puffer schreiben
sprintf(puffer,"%x", &main);
// und in einen long int umwandeln
sscanf(puffer, "%x", &zahl);
// ausgeben
printf("Die Adresse von main() ist"
"\n%d(dec), %x(hex), %o(oct)\n",
zahl, zahl, zahl);
}
Grüße
CMБ
OK,
char zahl_als_char[20]=„DE45“;
long zahl;
zahl = atol(zahl_als_char);„zahl“ hat jetzt den Wert
„0“, da die Hexadezimalzahl
als Dezimal oder als Text interpretiert wird.
Die ato[il]-Funktionen sind auch auf Base10 festgelegt. Für allgemeine Basen gibt es die Funktionen strtol und strtoll:
long int strtol(const char \*nptr, char \*\*endptr, int base);
long long int strtoll(const char \*nptr, char \*\*endptr, int base);
Das erste Argument (nptr) ist der Zeiger auf die Zeichenkette, endptr ist ein Zeiger auf einen Zeiger, der auf das erste nicht erkannte Zeichen im String verweist (darf auch NULL sein), und base gibt die Basis an. Wenn man als Basis 0 oder 16 angibt, wird auch das Prefix „0x“ erkannt, ansonsten sind alle Basen bis 36 gültig.
Beispiel für eine Hexadezimale Zahl:
char\* a = "0xaffe Das ist der weitere Text.";
char\* nc;
long n = strtol( a, &nc, 16 );
/\*
\* nc verweist jetzt auf das erste Leerzeichen in a
\*/
printf( "%d%s\n", n, nc );
Ausgabe:
45054 Das ist der weitere Text.
Hallo CMБ,
aus der Kalten:
long longzahl;
char string[20]=„3E4C“;
sscanf(string, „%x“, &longzahl);
entweder muss das Argument für sscanf() „% l x“ lauten oder die variable longzahl muss als int declariert werden.
eventuell unterstützt Dein sscanf auch „%D“
„%d“ funktioniert nur mit dezimalzahlen …
du meinst wahrscheinlich „%i“, die erkennt Hex-, Decimal- und Octal-Werte.
Mal sehen ob ich richtig geraten habe
Nicht ganz )
Vielleicht hättest du doch erst heizen sollen. *SCNR*
MfG Peter(TOO)
Hallo CMБ,
aus der Kalten:
long longzahl;
char string[20]=„3E4C“;
sscanf(string, „%x“, &longzahl);entweder muss das Argument für sscanf() „% l x“ lauten
oder die variable longzahl muss als int declariert
werden.
Verdammt. Da fummelt man 10 Jahre lang an 32-bit
X86 und gerade jetzt wo x86-64 vor der Tür steht,
passiert einem sowas
int proc()
{
**int** zahl; // lx", &zahl);
...
**return** 0;
}
Ich akzeptiere die fristlose Kündigung!
Vielleicht hättest du doch erst heizen sollen. *SCNR*
Hehe!
CMБ