2016-11-23 5 views
0

Ich habe eine Ganzzahl-Eingabe von 1991. Wie konvertiere ich die Eingabe in 0x1991 statt 7C7? Ich schrieb den Code bereits die Hex umwandeln in Dezimalzahlen (die Antwort wird 6545 sein)Konvertieren einer ganzen Zahl in 0x Äquivalent (Hex)

int ui = 0x202; 
int BCD(int value) //Converting 0xhex to decimal 
{ 
    int result = 0; 
    result <<= 4; 
    result |= ui % 10; 
    ui /= 10; 

    return value; 
} 
+0

Wissen Sie über [ 'strtol'] (https://msdn.microsoft.com/en-us/library/w4z2wdyc.aspx)? –

+0

Wenn der Kommentar von @ WeatherVane Ihnen nicht weiterhilft, fügen Sie bitte ein minimales vollständig überprüfbares Beispiel (http://stackoverflow.com/help/mcve) mit dem Hinweis hinzu, was genau Sie von dem Code erwarten. –

+1

Um von dezimal zu BCD zu konvertieren, starten Sie mit Null-Ergebnis und Multiplikator 1. In einer Schleife, teilen Sie den Dezimalwert durch zehn, aber nehmen Sie den Rest zuerst. Multiplizieren Sie den Rest mit dem Multiplikator und addieren Sie zum Ergebnis. Multiplizieren Sie den Multiplikator mit 16. Wiederholen Sie die Schleife, solange der Dezimalwert größer als Null ist. Um von BCD in Dezimal zu konvertieren, machen Sie dasselbe, außer dass Sie den BCD-Wert durch 16 teilen und den Multiplikator mit 10 multiplizieren. –

Antwort

2

Du ui als Eingabe verwendet und das Ergebnis in result speichern, aber dann Rückkehr value; Sie sollten value als Eingabe verwenden und result zurückgeben.

+1

Der Code soll 0x basierte Zahlen konvertieren, zum Beispiel, BCD (0x1991), die Ihnen die Antwort von 6545 geben wird. Ich habe jedoch keine Ahnung, wie man 1991 zu 0x1991 konvertiert –

+1

@xTiraMissU: Das ist nicht, was Sie gefragt haben, auch wenn es das ist, was Sie fragen wollten. Egal, was ich geschrieben habe, gilt immer noch. –

+1

Danke. Das habe ich bereits behoben :) Danke, dass Sie meine Fehler korrigiert haben –

5
const int input = 1991; 
int i = input; 
int f = 1; 
int result = 0x0; 
while(i > 0) 
{ 
    int d = i % 10; 
    result += d * f; 
    f *= 16; 
    i /= 10; 
} 

printf("0x%x", result); // 0x1991 
1

Erstellen Sie eine Zeichenfolge mit dem Präfix 0x und scannen Sie diese.

int var, value = 1991; 
char tmp[100]; 
sprintf(tmp, "0x%d", value); 
if (sscanf(tmp, "%i", &var) != 1) /* error */; 
printf("%d ==> %s ==> %d\n", value, tmp, var); 
Verwandte Themen