Re: conversion hexa-binaire
Citation:
Envoyé par jack69
Mon souci est existe-til une fonction de conversion me renvoyant 15 pour 'F' (ou tout simplement comment utiliser strtod correctement peut-etre) ?
Déjà, ça machera mieux avec la bonne fonction! Montre comment tu utilises strtoul().
Re: conversion hexa-binaire
Citation:
Envoyé par jack69
Mon souci est existe-til une fonction de conversion me renvoyant 15 pour 'F'
Oui, la fonction moins:
Code:
1 2 3 4 5
| int val(char x){
if (x>='0' && x<='9')
return x - '0';
if (x>='A' && x<'F')
return x - 'A' + 10; |
Sinon pour strtod, il te faut rajouter "0x" devant ta valeur (pour lui indiquer que c'est de l'hexa). Ou tu peux utiliser strtol en indiquant la base (16 pour hexa).
Re: conversion hexa-binaire
Citation:
Envoyé par D[r
eadLock]
Code:
1 2 3 4 5
| int val(char x){
if (x>='0' && x<='9')
return x - '0';
if (x>='A' && x<'F')
return x - 'A' + 10; |
Pour A-F (et les minuscules ?), ce n'est pas garanti par le langage. Ca fonctionne en ASCII.
Citation:
Sinon pour strtod, il te faut rajouter "0x" devant ta valeur (pour lui indiquer que c'est de l'hexa). Ou tu peux utiliser strtol en indiquant la base (16 pour hexa).
strtod() n'accepte que des chaines décimales avec ou sans virgule fixe. strtoul() accepte les chaines hexa avec la base 16 ou les chaines 0x<hexa> avec la base 'automatique' (0).
Re: conversion hexa-binaire
Citation:
Envoyé par Emmanuel Delahaye
Citation:
Envoyé par jack69
Mon souci est existe-til une fonction de conversion me renvoyant 15 pour 'F' (ou tout simplement comment utiliser strtod correctement peut-etre) ?
Déjà, ça machera mieux avec la bonne fonction! Montre comment tu utilises strtoul().
Effectivement, ca marche beaucoup mieux avec strtoul ! Merci bien.
Une petite question supplémentaire pour info cependant avant de clore le post : mon code est le suivant :
Code:
1 2 3 4 5 6 7 8 9 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 36 37 38 39 40 41 42 43 44 45 46
| int main(void)
{
char* source = "0123456789ABCDEF";
char*dest=NULL;
char courant;
char* bincode=NULL;
int i,j,srclen=0, destlen=0;
unsigned long index;
srclen = strlen(source);
destlen = 4* srclen;
dest = (char*)malloc(destlen);
if (dest != NULL)
{
for(i=0; i<srclen;i++)
{
courant = *source;
printf("courant : %c\n", courant);
index = strtoul(&courant, stop, 16);
printf("index : %d\n", index);
bincode = tab[index];
printf("bincode : %.4s\n", bincode);
if ( index >= 0 )
for(j=0; j<4; j++)
*dest++ = *bincode++;
source++;
}
}
else
{
printf("Malloc Dest echoue !!!!\n");
return -1;
}
*dest = '\0';
dest = dest-destlen;
printf(" destination : %s\n", dest);
return 0;
} |
Suis-je obligé de passer par la variable intermédiaire courant ou existe-t-il une autre fonction qui me permettrait de travailler sur source sans considérer que le nombre est "0123456..." comme le fait strtoul ?
Re: conversion hexa-binaire
Citation:
Envoyé par jack69
Une petite question supplémentaire pour info cependant avant de clore le post : mon code est le suivant :
Ce code est incomplet
Citation:
Suis-je obligé de passer par la variable intermédiaire courant ou
Oui. Par contre, la valeur numérique est déjà en binaire. Il suffit donc de tester chaque bit de la valeur et de le convertir en '0' ou '1'. Ca doit pas être trop dur...