Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Umwandlung einer Dezimalzahl in Hexadezimal in C

Nobody666 / 4 Antworten / Baumansicht Nickles

Hallo zusammen,


kann mir jemand den Sourcecode in C sagen, wie ich aus einer Datei eine Dezimalzahl einlese und sie dann in Hexadezimal umrechne? Muß dann mit der umgerechneten Zahl weiterrechnen. Danke!!!

bei Antwort benachrichtigen
Andreas42 Nobody666 „Umwandlung einer Dezimalzahl in Hexadezimal in C“
Optionen

Hi!

So ganz verstehe ich deine Frage nicht. Eine Zahl, die in einer numerischen Variable gespeichert wird ist eine Zahl und kann immer weiterverrechnet werden.

Bei der Eingabe werte ich ein Zahlendarstellungsformat aus und wandele dieses in einen numerischen Wert um. Bei der Ausgabe nehme ich den numerischen Wert und wandle ihn in eine Zeichenkette um. Das Format der Ausgabe kann ich dabei weitgehend selbst bestimmen.

Die Funktionen zur Zeichenwandlung in numerische Werte und umgekehrt findet man doch dann in jeder C-Doku (Stichwort scanf() und printf()).

Bis denn
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Nobody666 Andreas42 „Hi! So ganz verstehe ich deine Frage nicht. Eine Zahl, die in einer numerischen...“
Optionen

Hi,
also mein Problem ist folgendes. Ich habe eine 8 stellige Zahl im Dezimalformat in einer Datei fest stehen z.B. 48965231. Nun muß ich diese aber in einem Programm verarbeiten, welches die ASCII Werte verarbeitet und zwar immer von den zweistelligen Hexwerten. In meinem Beispiel heißt dass, 48965231 in Hex wäre 02 EB 26 6F (hab ich jetzt gleich mit Leerstellen zur Übersichtlichkeit getrennt). Nun muß ich in diesem Programm mit den Ascii Werten von 02, von EB, von 26 und von 6F (insgesamt also 4 Ascii Werte) weiterrechnen.
Genau da ist mein Problem. Muß die ganze Zahl in Hex umrechnen, dann in Tuppel aufteilen und diese in Ascii umrechnen. Wobei von diesen Tuppel in Ascii kein Problem ist, geht ja dann einfach mit printf, aber eben diese Aufteilung brauch ich.
Hoffe hab dir mein Problem ein wenig erklären können.
Wäre über eine Antwort sehr dankbar!

bei Antwort benachrichtigen
Andreas42 Nobody666 „Hi, also mein Problem ist folgendes. Ich habe eine 8 stellige Zahl im...“
Optionen

Hi!

Ich hab' im Moment keinen C-Compiler am Ende des Tataturkabels. Aber wenn ich mich nicht irre (und mein Turbo C++ 3.0 Handbuch behauptet das auch), dann kannst du doch mit printf() auch ganzahlige Werte in Hex-Darstellung ausgeben (Stichwort: %X bzw. %lX).

Mit sprintf() steht die Funktion von printf() ja dann zur Verfügung um das Ergebnis in einen String speichern zu können.

Falls du damit nicht klarkommst, kannst du natürlich selbst umrechnen:

Teile denen Wert durch 16 (Integerdivision) und ziehe dasvErgebnis vom Ursprungswert ab. Dieses Subtraktionsergebnis liegt zwischen 0 und 15 und entspricht genau edem Wertebereich einer HEX-Ziffer.
Das ganze wiederholt man, bis der Divisionsrest 0 (Null) wird.

Bis denn
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
vergisses Andreas42 „Hi! Ich hab im Moment keinen C-Compiler am Ende des Tataturkabels. Aber wenn ich...“
Optionen

Für Schreibfaule, hier werden 8stellige Dezimalzahlen
als Strings hin und her konvertiert.
Voraussetzung ist dec[9], und hex[17]
Fehler, wie immer, nicht ausgeschlossen ;-)
Gruss, vergisses

void decToHex( const char* dec, char* hex )
{
for( int i=0; i {
unsigned char c = dec[i];
hex[2*i ] = (c/16 hex[2*i+1] = (c%16 }
hex[16]=0;
}
void hexToDec( const char* hex, char* dec )
{
for( int i=0; i {
char c1 = hex[2*i ];
char c2 = hex[2*i+1];
int n1 = (c1 int n2 = (c2 unsigned char c = n1*16+n2;
dec[i] = c;
}
}

bei Antwort benachrichtigen