2016-06-23 9 views
-1

Ich möchte ein Hexadezimal mit einem Hexadezimal vergleichen und zeigen, ob es das gleiche ist. Zum Beispiel:Unit-Test: Erwarteter Ergebnis mit Hexadezimal vergleichen

decimal = 255 
ExpResult = FF 
Hex[x] = FF --> true 
+0

In 'if (ExpResult = Hexa [x! ]) 'where' x' ist jetzt '0' Sie haben nichts in' hexa [0] 'geschrieben. –

+0

'char ExpResult' ->' nicht signiertes char ExpResult' – LPs

+1

C hat keine hexadezimalen Variablen. Siehe [fragen]. Was ist dein ** spezifisches ** Problem? – Olaf

Antwort

0

Gibt es Gründe, die Sie ExpResult Argument als char erklärt haben? und auch Code ist ein wenig unlesbar (benutzen Sie einige Tabs).

Ich werde einige pesu-Code schreiben:

First get the number input from user. 
Calculate the hexadecimal value with an algorithm. 
Print it. // printing hexadecimal is another story itself 
get that hex value from user. 
Check it with the expected value. 

Siehe this für den Druck (formatiert) Hexadezimal-Werte.

+0

Ich habe das .. Ich kopiere nur den problematischen Teil meines Codes .. weil es sehr lang und unklar ist –

+0

@jackobhusein der Punkt ist, dass Sie Ihren Code löschen sollten und wickeln sie in Funktionen, so dass das nächste Mal, wenn Sie Ihre bearbeiten möchten code verstehen Was ist was ... –

+0

ich glaube nicht, dass es möglich ist, 255+ für die Verwendung von nur c zu unterstützen. –

1

Ich schrieb ein Programm, das zwei Argumente des Programms und Ausgänge vergleicht, wenn sie passen oder nicht ... Hoffe, es wird helfen;)

#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 

static char *malloc_hexa(unsigned int num) 
{ 
    int  len = 0; 

    if (num == 0) 
    len = 1; 
    while (num > 0) 
    { 
     num /= 16; 
     len++; 
    } 
    return (malloc(sizeof(char) * (len + 1))); 
} 

int  main(int ac, char **av) 
{ 
    char  *tmp = NULL; 
    unsigned int num = 0; 

    if (ac != 3) 
    { 
     printf("Use: ./test [number] [Hexa]\n"); 
     return (1); 
    } 
    num = (unsigned int)atoi(av[1]); 
    if (!(tmp = malloc_hexa(num))) 
    return (1); 
    if (sprintf(tmp, "%X", num) <= 0) 
    return (1); 
    if (!strcmp(tmp, av[2])) 
    printf("match: %s/%s\n", tmp, av[2]); 
    else 
    printf("no match: %s/%s\n", tmp, av[2]); 
    free(tmp); 
    return (0); 
} 
+0

Randnotiz: Wenn sprintf fehlschlägt, haben Sie einen Speicherverlust. – LPs

+0

Ja, das habe ich vergessen. Sie könnten einfach eine freie() vor der Rückkehr in der if-Bedingung für sprintf ... hinzufügen –