CONVERSION DÉCIMAL/BINAIRE

Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 - 19 juin 2004 à 12:08
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 19 juin 2004 à 15:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23822-conversion-decimal-binaire

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juin 2004 à 15:35
neonp > faut oublier TOTALEMENT ce que tu as vu en VB et ne JAMAIS chercher a traduire un code VB en C. Il faut penser en C, j'entends par la qu'on accede direct a la memoire donc utiliser des pointeurs, c'est ainsi que tu auras un code performant sinon autant rester VB.
neonp Messages postés 2 Date d'inscription samedi 30 novembre 2002 Statut Membre Dernière intervention 19 juin 2004
19 juin 2004 à 15:16
Pamaury, personnellement, je me sert de cette fonction dans un prog de cryptage. je l'avais fais en visual basic et j'essaie de le passer en c
neonp Messages postés 2 Date d'inscription samedi 30 novembre 2002 Statut Membre Dernière intervention 19 juin 2004
19 juin 2004 à 15:15
excusez moi d'être novice, mé c ma mremière source
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juin 2004 à 14:57
c'est si 'pas tres terrible' que ne passera pas la journee si pas arrange en un code correct.

Pendant qu'on a le pointeur sur fin d'ecriture, retournon le, evitera des strcat si besoin de chainage. J'ai verifie, compilo (VS 2003) sort un code optimal, aucun param sur pile, il passe en registres.

char* __stdcall IntToBin(int n, char *psz)
{
if(!n) *psz++ = 48;
else {
while(!(n & 0x80000000)) n <<= 1;
while(n) {
*psz++ = (n & 0x80000000) ? 49: 48;
n <<= 1;
}
}
*psz = 0;
return psz;
}

permet de faire par exemple:
strcpy(IntToBin(147, szbuff), " YOUPI");
sort bien "10010011 YOUPI"
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 juin 2004 à 14:24
Même si BruNews a proposé mieux (ba oui, c'est BruNews !)

du haut de mon peu d'experience en C (je m'y met ;))
je suis pas sur que ta fonction

//char *binair;
//binair=new char[i];
//n=1;
//for (j=1;j<=i;j++){
// if(n*(dec%2)==0)
// binair[j]="0";
// else
// binair[j]="1";
//}

soit très terrible...

for (j=1;j<=i;j++){ -> tu commences pas au caractère 0, toi ?
binair[j]="0"; -> binair[j]='0'; me semble plus approprié...
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juin 2004 à 12:38
on resume:

void IntToBin(int n, char *psz)
{
if(!n) *psz++ = 48;
else {
while(!(n & 0x80000000)) n <<= 1;
while(n) {
*psz++ = (n & 0x80000000) ? 49: 48;
n <<= 1;
}
}
*psz = 0;
}
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juin 2004 à 12:32
j'ai oublie cas n == 0;
psz[0] = 48; psz[1] = 0; // FINI
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 juin 2004 à 12:26
#include <windows.h>

void IntToBin(int n, char *psz)
{
char *c = psz;
while(!(n & 0x80000000)) n <<= 1;
while(n) {
*c++ = (n & 0x80000000) ? 49: 48;
n <<= 1;
}
*c = 0;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
char buff[36];
IntToBin(13, buff);
MessageBox(0, buff, szappname, 0);
return 0;
}
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
19 juin 2004 à 12:08
je suis peut-être bête mais à quoi cela sert de prendre un int en paramètre et de renvoyer un int et puis en plus, imagine que ton int soit rempli avec la valeur la plus grande possible, ta fonction plantera à cause de l'overflow . Et puis quel est l'intérêt de ce code, donne un exemple d'utilisation parce que là je voit vraiment pas où il peut servir .
Rejoignez-nous