|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
CONVERSION DEC / HEX / BIN (WIN 32)
Information sur la source
Description
Bon, je sais qu'il y a deja pas mal de sources sur ces conversions, j'aporte juste une "interface graphique" avec ce prog, si on peut appeller ca comme ca.
Source
- #include <windows.h>
- #include "resource.h"
-
-
- //----------------------------------------------------------------------------------
- // variables globales
- //----------------------------------------------------------------------------------
- static HWND hDec;
- static HWND hHex;
- static HWND hBin;
- static WNDPROC pOldEditProc;
-
- // char to int table
- static char c2i_table[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
- 0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35, 0, 0, 0, 0, 0,
- 0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
- // int to char table
- static char i2c_table[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
-
-
- //----------------------------------------------------------------------------------
- // base
- // - inbase : entre 2 et 16
- // - outbase : entre 2 et 16
- //----------------------------------------------------------------------------------
- char* base(char* number, int inbase, int outbase)
- {
- char* p = NULL;
- char* b = NULL;
- unsigned __int64 nb = 0;
-
- static char buff[128];
-
- // évalue number
- for(p = number; *p != '\0'; p++)
- {
- nb *= inbase;
- nb += c2i_table[*((unsigned char*)p)];
- }
-
- // écrit le nombre convertis dans buff
- for(p = buff; nb > 0; p++)
- {
- *p = i2c_table[nb % outbase];
- nb /= outbase;
- }
-
- // retourne la chaine
- for(b = buff, *p-- = '\0'; b < p; b++, p--)
- {
- char tmp = *b;
- *b = *p;
- *p = tmp;
- }
- return buff;
- }
-
-
- //----------------------------------------------------------------------------------
- // UpdateContent
- //----------------------------------------------------------------------------------
- void UpdateContent(HWND hEdit, int inbase)
- {
- char buff[128];
-
- GetWindowText(hEdit, buff, 128);
-
- switch(inbase)
- {
- case 2:
- SetWindowText(hDec, base(buff, 2, 10));
- SetWindowText(hHex, base(buff, 2, 16));
- break;
- case 10:
- SetWindowText(hBin, base(buff, 10, 2));
- SetWindowText(hHex, base(buff, 10, 16));
- break;
- case 16:
- SetWindowText(hBin, base(buff, 16, 2));
- SetWindowText(hDec, base(buff, 16, 10));
- break;
- }
- }
-
-
- //----------------------------------------------------------------------------------
- // EditProc
- //----------------------------------------------------------------------------------
- LRESULT CALLBACK EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- if(uMsg == WM_CHAR)
- {
- WPARAM key = wParam;
-
- // autorise copier/coller + effacer
- if(key == 0x03 || key == 0x16 || key == VK_BACK) goto defproc;
-
- // n'autorise que certains caracteres
- if(hWnd == hDec) // 01234567890
- {
- if(key >= '0' && key <= '9') goto defproc;
- return 0;
- }
- else if(hWnd == hHex) // 0123456789 abcdef ABCDEF
- {
- if((key>= '0' && key <= '9') || (key >= 'a' && key <= 'f') || (key >= 'A' && key <= 'F')) goto defproc;
- return 0;
- }
- else if(hWnd == hBin) // 01
- {
- if(key != '0' && key != '1') return 0;
- }
- }
- defproc:
- return CallWindowProc(pOldEditProc, hWnd, uMsg, wParam, lParam);
- }
-
-
- //----------------------------------------------------------------------------------
- // AppDlgProc
- //----------------------------------------------------------------------------------
- INT_PTR CALLBACK AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch(uMsg)
- {
- case WM_INITDIALOG:
- {
- // editbox
- hDec = GetDlgItem(hDlg, IDC_DEC);
- hHex = GetDlgItem(hDlg, IDC_HEX);
- hBin = GetDlgItem(hDlg, IDC_BIN);
- SendMessage(hDec, EM_SETLIMITTEXT, 20, 0);
- SendMessage(hHex, EM_SETLIMITTEXT, 16, 0);
- SendMessage(hBin, EM_SETLIMITTEXT, 64, 0);
-
- // sous classement
- pOldEditProc = (WNDPROC)(LONG_PTR) SetWindowLong(hDec, GWL_WNDPROC,(LONG)(LONG_PTR) EditProc);
- SetWindowLong(hHex, GWL_WNDPROC,(LONG)(LONG_PTR) EditProc);
- SetWindowLong(hBin, GWL_WNDPROC,(LONG)(LONG_PTR) EditProc);
-
- // focus
- wParam = (WPARAM) hBin;
- }
- return TRUE;
-
- case WM_COMMAND:
- switch(wParam)
- {
- // update texte des edits
- case MAKEWPARAM(IDC_DEC, EN_CHANGE):
- if(hDec == GetFocus()) UpdateContent(hDec, 10);
- return FALSE;
- case MAKEWPARAM(IDC_HEX, EN_CHANGE):
- if(hHex == GetFocus()) UpdateContent(hHex, 16);
- return FALSE;
- case MAKEWPARAM(IDC_BIN, EN_CHANGE):
- if(hBin == GetFocus()) UpdateContent(hBin, 2);
- return FALSE;
-
- case IDCANCEL:
- EndDialog(hDlg, 0);
- return FALSE;
- }
- }
- return FALSE;
- }
-
-
- //----------------------------------------------------------------------------------
- // WinMain
- //----------------------------------------------------------------------------------
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
- {
- DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, AppDlgProc, 0);
- return 0;
- }
#include <windows.h>
#include "resource.h"
//----------------------------------------------------------------------------------
// variables globales
//----------------------------------------------------------------------------------
static HWND hDec;
static HWND hHex;
static HWND hBin;
static WNDPROC pOldEditProc;
// char to int table
static char c2i_table[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0,
0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35, 0, 0, 0, 0, 0,
0,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// int to char table
static char i2c_table[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
//----------------------------------------------------------------------------------
// base
// - inbase : entre 2 et 16
// - outbase : entre 2 et 16
//----------------------------------------------------------------------------------
char* base(char* number, int inbase, int outbase)
{
char* p = NULL;
char* b = NULL;
unsigned __int64 nb = 0;
static char buff[128];
// évalue number
for(p = number; *p != '\0'; p++)
{
nb *= inbase;
nb += c2i_table[*((unsigned char*)p)];
}
// écrit le nombre convertis dans buff
for(p = buff; nb > 0; p++)
{
*p = i2c_table[nb % outbase];
nb /= outbase;
}
// retourne la chaine
for(b = buff, *p-- = '\0'; b < p; b++, p--)
{
char tmp = *b;
*b = *p;
*p = tmp;
}
return buff;
}
//----------------------------------------------------------------------------------
// UpdateContent
//----------------------------------------------------------------------------------
void UpdateContent(HWND hEdit, int inbase)
{
char buff[128];
GetWindowText(hEdit, buff, 128);
switch(inbase)
{
case 2:
SetWindowText(hDec, base(buff, 2, 10));
SetWindowText(hHex, base(buff, 2, 16));
break;
case 10:
SetWindowText(hBin, base(buff, 10, 2));
SetWindowText(hHex, base(buff, 10, 16));
break;
case 16:
SetWindowText(hBin, base(buff, 16, 2));
SetWindowText(hDec, base(buff, 16, 10));
break;
}
}
//----------------------------------------------------------------------------------
// EditProc
//----------------------------------------------------------------------------------
LRESULT CALLBACK EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg == WM_CHAR)
{
WPARAM key = wParam;
// autorise copier/coller + effacer
if(key == 0x03 || key == 0x16 || key == VK_BACK) goto defproc;
// n'autorise que certains caracteres
if(hWnd == hDec) // 01234567890
{
if(key >= '0' && key <= '9') goto defproc;
return 0;
}
else if(hWnd == hHex) // 0123456789 abcdef ABCDEF
{
if((key>= '0' && key <= '9') || (key >= 'a' && key <= 'f') || (key >= 'A' && key <= 'F')) goto defproc;
return 0;
}
else if(hWnd == hBin) // 01
{
if(key != '0' && key != '1') return 0;
}
}
defproc:
return CallWindowProc(pOldEditProc, hWnd, uMsg, wParam, lParam);
}
//----------------------------------------------------------------------------------
// AppDlgProc
//----------------------------------------------------------------------------------
INT_PTR CALLBACK AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
// editbox
hDec = GetDlgItem(hDlg, IDC_DEC);
hHex = GetDlgItem(hDlg, IDC_HEX);
hBin = GetDlgItem(hDlg, IDC_BIN);
SendMessage(hDec, EM_SETLIMITTEXT, 20, 0);
SendMessage(hHex, EM_SETLIMITTEXT, 16, 0);
SendMessage(hBin, EM_SETLIMITTEXT, 64, 0);
// sous classement
pOldEditProc = (WNDPROC)(LONG_PTR) SetWindowLong(hDec, GWL_WNDPROC,(LONG)(LONG_PTR) EditProc);
SetWindowLong(hHex, GWL_WNDPROC,(LONG)(LONG_PTR) EditProc);
SetWindowLong(hBin, GWL_WNDPROC,(LONG)(LONG_PTR) EditProc);
// focus
wParam = (WPARAM) hBin;
}
return TRUE;
case WM_COMMAND:
switch(wParam)
{
// update texte des edits
case MAKEWPARAM(IDC_DEC, EN_CHANGE):
if(hDec == GetFocus()) UpdateContent(hDec, 10);
return FALSE;
case MAKEWPARAM(IDC_HEX, EN_CHANGE):
if(hHex == GetFocus()) UpdateContent(hHex, 16);
return FALSE;
case MAKEWPARAM(IDC_BIN, EN_CHANGE):
if(hBin == GetFocus()) UpdateContent(hBin, 2);
return FALSE;
case IDCANCEL:
EndDialog(hDlg, 0);
return FALSE;
}
}
return FALSE;
}
//----------------------------------------------------------------------------------
// WinMain
//----------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, AppDlgProc, 0);
return 0;
}
Conclusion
L'executable est dans le repertoire release, il faut renomer le fichier .ex_ en .exe.
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 13 août 2004 22:14:58 :
- nouvelle version
- 13 août 2004 22:19:14 :
- petit oubli
- 15 octobre 2005 18:43:24 :
- prog refais, gere les conversions de nombres sur 64 bits.
- 09 mai 2007 15:40:26 :
- correction bug
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
conversion binaire-décimal en C [ par Tooshort23 ]
Bonjour,je suis étudiant en IUT GEII.Savais vous convertir un nombre binaire (de taille: 32 bits) en décimal ?merci de me donner des conseils.Si possi
Bis: Binaire en C [ par fredleconte ]
Réponse acceptée ! Mon problème n'est pas de convertir un nombre d'un base a l'autre mais de l'écrire comme en basic "%1010101" ou "%" désigne un nomb
conversion decimal - binaire [ par diabablo ]
slt les amisj'aime la programmation mais pour debuter j'ai un peu de soucis tel que la conversion d'un nombre decimal en binaire. en faite ce n'est pa
ecritute en base 2 [ par fredleconte ]
Hello,je veux ecrire un chiffre binaire ( Par ex. 1010101 en base binaire dans le texte) en C sans convertir en decimal ou en hexadecimal( Je cherche
conversion hexadecimal-binaire [ par naddoush ]
salut tout le monde, je voudrais bien faire une conversion de l'hexadecimal en binaire, y a-t-il une fonctio que me permet de faire ça? je travaille
Conversion Binaire->Chaine et Chaine->Binaire [ par Rouliann ]
Bonjour à tous!Voilà mon problème : je veux convertir une couleur de 24 bits en une couleur 15bits...Le seul moyen que j'ai trouvé
convertir un float en binaire [ par tiess81 ]
Bonjour je suis en train de concevoir un interpreteur avec flex et bison qui doit me permettre de faire des calculs arithmétique dans toutes les
Conversion chaine binaire en float, double... [ par renyone ]
Bonjour, j'ai une chaine binaire (de 32 bits par exemple) et j'aimerais obtenir le float (ou double...) qu 'elle représente; Y a-t-il des fonctions dé
Conversion d'entier en base 2^32 vers base 10 [ par le_duche ]
Bonjour !Je chercher je cherche, mais je ne trouve pas d'idée.Dans le cadre de l'implémentation d'une classe de grands entiers, je souhaite pouvoir co
programation [ par oussamacss ]
j'aime bien avoir un programe pour la conversion des base exp: base binaire aux base desimale base binaire aux base hexa decimale et......
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|