PatSW
Messages postés24Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention 1 février 2005
-
31 janv. 2005 à 01:14
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
1 févr. 2005 à 09:01
Je vien tout juste de créer un tit prog pour convertir un fichier en fichier texte
hexadecimal. Je suis quelque peu débutant en c/c++ alors je voudrais savoir
comment je pourrais améliorer celui-ci. J'ai aussi un petit probleme:
la façon dont ce prog fonctionne c'est que je glisse un fichier dessu et il le
convertit, mais lorsque j'en glisse plusieurs à la fois, il ne les convertit pas tous:
si je glisse 2 fichier, il en converti 1;
3 -> 2;
4 -> 2;
5 -> 3;
j'ai essayer de plusieurs façon et c'est toujours le même probleme, même
en passant les parametre a l'aide de l'invite de command windows.
PatSW
Messages postés24Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention 1 février 2005 31 janv. 2005 à 16:42
Salut BruNews,
J'ai chercher un peu sur le site pour des fonctions de conversion vers hexa, mais je n'en ai trouvé aucune utilisant UINT, mais j'ai vu ta fonction IntToBin qui est très intéressante!
Je voudrais savoir, comment tu ferais un ByteToHex ou IntToHex ou CharToHex (laquelle de ces fonctions serait la meilleure) ?
Merci
The Universal ßð¥
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 31 janv. 2005 à 17:48
Non seulement elle n'est pas optimisée mais en plus erronée. On ne renvoi JAMAIS un pointeur sur une variable ou buffer local à une fonction. Pour renvoyer un pointeur il faut soit l'allouer soit utiliser une variable static. Dans ton cas ça marche peut-être car la pile n'est pas utilisée après l'appel de la fonction mais en général ça plante.
le plus simple :
szVal[3];
BYTE b = 123;
BYTE hi = (b>>4)&0xf;
BYTE lo = b&0xf;
szVal[0] = (hi<=9) ? '0'+hi : 'A'+hi-10;
szVal[1] = (lo<=9) ? '0'+lo : 'A'+lo-10;
szVal[2] = '\0';
sinon il y a la fonction atoi qui permet de transformer un entier en chaîne dans la base que tu veux (16 pour toi)
szVal[16];
BYTE b = 123;
itoa(b, szVal, 16);
puis j'ai tester ceci
*psz++ = 48+hi+7*(hi>=9);
*psz++ = 48+lo+7*(lo>=9);
au lieu de ceci
*psz++ = (hi<=9) ? 48+hi : 55+hi;
*psz++ = (lo<=9) ? 48+lo : 55+lo;
puis j'ai fais les test de vitesse, et ma fonction est plus rapide que celle que tu ma suggéré...
J'ai aussi testé avec itoa, mais c'est beaucoup trop lent!!!
PatSW
Messages postés24Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention 1 février 2005 1 févr. 2005 à 02:35
Petite question en passant:
j'ai mit for(int i=0; i<5000;i++) en sachant que "str" aurait tjrs 5000 caratere ds mon teste mais comment faire pour detecter la vrai longeur du buffer str??
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 1 févr. 2005 à 09:01
Ue chaîne de caractère en C se termine toujours par un caractère nul (0 ou '\0') il suffit donc de tester cette valeur pour sortir de la boucle. On peut également utiliser strlen pour connaître la taille mais dans ton cas cela reviendrait à parcourir 2 fois la chaîne (une fois pour connaître sa taille et une autre pour faire la conversion).
PS : on n'utilise pas sizeof sur une chaîne de caractères passée en paramètre par l'intermédiare d'un pointeur car cela renverra toujours 4 (sur plateforme 32 bits).