HEX-Wert aus Zeichenkette in Integer umwandeln
-
Hi,
folgendes Problem:
ich habe die Zeichenkette "74B62C40" und möchte diese in Integer umwandeln.
Wie mach ich das???
Die Integerdarstellung soll aber als HEX erfolgen, also sollte es nach der Umwandlung so aussehen:
int a=0x74B62C40
Vielen Dank schonmal,
MFG
MTC
-
Meinst du sowas?
#include <iostream> using namespace std; /* Ganz ausnahmsweise, nur damit kein Müll in den Feldern steht */ char hexwert[10]; int main(int argc, char *argv[]) { int wert=0; cout<<"Bitte eine Hexadezimalzahl eingeben: "; cin>>hexwert; for(int i=0; i<=10; ++i) wert += hexwert[i]; return (0); }
Oder bin ich auf dem Holzweg?
-
Bist glaub ich ganz schön auf dem Holzweg
Der Hex-String bzw. die Zeichenkette, ist ein kompletter HEX-Wert.
Was du da gemeint hattest, ist glaub ich einfach nur die Quersumme, entspricht aber nicht dem Ganzzahligen Wert der Zeichenkette.
Dieser ist nämlich gesucht.
Und außerdem hab ich das ins ANSI-C Forum gepostet, weil ich den C-Code brauch und nicht den C++ Code.
-
na ja ob da nun cout oder printf steht
Also du willst einen Hexwert in einem Integer speichern?
Dann schreib doch eine Funktion die ihn in einen dezimalwert umrechnet und dann zuweist:
74B62C40 = 7*167+4*166+11*165+6*164+2*163+12*162+4*161+0*160
das ergebnis ab in ne int variable.
Na was mach ich jetzt wieder falsch
?
-
:p Jetzt machst du nix falsch, aber es geht viel einfacher. :p
Hab es grad rausgefunden und zwar kann man einfach die Funktion strtol verwenden.
Die macht alles!
Danke trotzdem
-
ich würde mich freuen wenn du den code posten würdest
interessiert mich!
-
So gehts:
int main(int argc, char *argv[]) { int test=0xabcdef00; printf("%x, %X, %i",test,test,test); system("PAUSE"); return 0; }
Unterschied zwischen x und X ist lediglich die Groß/Kleinschreibung
*edit*
Args sehe gerade daß Du da ne Zeichenkette hast und mit der Ackern musst... Da fällt mir auch nix zu ein.
-
Danke für die Tips!
Hier ist meine Lösung:
char test="AABBCCDD"; long hex; hex = strtoul(test,NULL,16);
Und fertig ist das Ergebnis. In hex steht nun der Ganzzahlige Wert der HEX-Zeichenkette drin.
MfG
MTC
-
Es gibt übrigens auch noch sscanf()
char test="AABBCCDD"; long hex; sscanf(test, "%x", &hex);
Bei strtol() wär ich mir nicht sicher, ob er wirklich immer den richtigen Wert bringt.
Probier mal den hexadezimalen Wert 12 mit strtol() umzurechnen. Wenn dann nämlich wieder 12 rauskommt, solltest du dir gedanken machen
-
Ich denke strtoul arbeitet korrekt, hab verschiedene zahlen und system gestestet
char test[]="1111"; long hex; hex = strtoul(test,NULL,8); cout<<hex;
Gibts jetzt auch noch die passende Funktion um eine Dezimalzahl in ein beliebiges Zahlensystem umzurechnen?
-
Oh hab den letzten Parameter von strtol() übersehen (die Funktion ist mir nicht ganz geläufig).
Eine Bitte an dich. Verwende hier im ANSI-C Forum bitte kein cout oder cin. Das ist und bleibt C++ und es ist nicht egal.
-
Ja ok geht klar
Aber wenn jemand noch eine Funktio kennt um Dezimalzahlen in jedes beliebige Zahlensystem zu konvertieren -> nur her damit!
-
könnte man sich doch auch selber schreiben
-
Na ja ich hätte mir auch meine eigene strtoul() schreiben können, aber wozu die mühe falls es doch was fertiges gibt :p
-
Ja falls!