Code:
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <string.h>

void chuyendoi(long so,int he)
    {
        if (so>=he) chuyendoi(so/he,he);
        printf("%c",(so%he)["0123456789ABCDEF"]);
    }
long chuyenve(char* a,int he,int i) // i= strlen(a)
    {
    return (a[i-1]-'0')*long(pow(he,strlen(a)-i))+((i==1)?0:chuyenve(a,he,i-1));
    }
int main(void)
    {
        //clrscr();
        char so[40];
        int hsgoc,hsdich;
        printf("Nhap vao he co so hexa: ");gets(so);
        printf("Ket qua : ");
        chuyendoi(chuyenve(so,16,strlen(so)),2); 
        getch();
    }
E đổi từ số Hexa sang nhị phân bị sai.
Vd:
inp: A
out: 10001 //Kết quả bị sai

Ai ghé qua xem dùm e với!! E cảm ơn!