Accueil > > > CONVERSION DEC / HEX / BIN (WIN 32)
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.
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
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
Conversion binaire -> Texte [ par milanoran ]
Bonjour j'ai un petit problème avec une application sous visulen c++ 6.0 qui nécessite une conversion binaire -> caractère . pour être plus précis j
conversion binaire vers float rs-232 [ par zilot2 ]
bonjours et pardonnez mon français: j'ai un projet pic16f qui consiste a envoyer un nombre float au port rs-232 puis je l'affiche sur pc.mon probleme
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
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|