begin process at 2012 05 28 23:18:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Fichier & Disque

 > 

Coonversion Héxa - Décimale


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Coonversion Héxa - Décimale

jeudi 15 mars 2007 à 14:43:12 | Coonversion Héxa - Décimale

2bhq

Bonjour,

ne vous fiez pas au titre c'est pas si simple.
Je fais un programme qui accède au disque dur secteur par secteur et peut lire ou écrire ces derniers.
Je récupère des secteurs sour forme de tableaux de UCHAR.
Par exemple dans le secteur MBR j'ai la table des partions qui me donne le secteur de début et le nombre de secteurs de chaque partitions. Ces données sont en héxa. Par exemple l'adresse de la partition tiens sur 4 octets comme 20 D8 E0 30 chacun de ces octets est reçu dans une case de mon tableau donc sous forme d'un UCHAR. Le pb c'est que j'adresse mon disque en LBA et donc en décimal, je dois donc concatener ces 4 UCHAR -> 20D8E030 et transformer le nombre héxa ainsi obtenu en décimal -> 551084080.

Et c'est làque je coince. Avez vous des idées ? Je suis sous VC++ 6
jeudi 15 mars 2007 à 14:59:51 | Re : Coonversion Héxa - Décimale

SAKingdom

Membre Club
Réponse acceptée !
#define TODWORD(a,b,c,d) (a<<24|b<<16|c<<8|d)

DWORD dword = TODWORD(0x20,0xD8,0xE0,0x30);

Ça c'est si ton tableau de UCHAR contien des valeurs hexa et non des valeurs ascii. Si il contien des valeurs ascii (c'est donc une chaine de caractère, le 0 de fin de chaine est présent), tu peux utiliser la fonction de BruNews dans les snippets ici.

Pour la conversion hexa vers int, ça n'a pas de sens. C'est la même chose. Un int peut très bien "faire passer" sa valeur pour de l'hexa et un DWORD pour un entier. Aucune conversion n'est nécessaire. Si tu veux récupérer la valeur en ascii (donc dans une chaine de caractère) et sous forme décimal, un simple itoa après l'utilisation de ma macro ou de la fonction de BruNews fera l'affaire.

C++ (@++)

jeudi 15 mars 2007 à 15:02:27 | Re : Coonversion Héxa - Décimale

goast_tu

Bon si j'ai bien compris il fo convertire un tableau de caracters en decimal. Alors le plus simple c'est de parcourir le tableau à l'enver.

donc supposons que ton chiffre en hexa est dans tab[8] alors l'algo doit ressembler à ca

res = 0;
for(i = 0; i<8; i++)
    res = res * 10 + (tab[i] > '0' && tab[i] < '9') ? tab[i] - '0' : tab[i] - 'A'  + 10;


Trafic web gratuit!!!
jeudi 15 mars 2007 à 15:17:12 | Re : Coonversion Héxa - Décimale

2bhq

Merci bcp SAKingdom pour cette réponse. Mon tableau contient bien des valeurs héxa. Je ne suis pas expert en C++, je débute même, peux-tu m'en dire un peu plus sur l'utilisation de ce que tu me proposes.

Merci pour cette réactivité en tous cas
jeudi 15 mars 2007 à 15:43:29 | Re : Coonversion Héxa - Décimale

SAKingdom

Membre Club
Réponse acceptée !
Alors si ton tableau est codé comme suit par exemple:

tab[0] = 0x55;
tab[1] = 0x24;
etc...

Tout ce qu'il faut faire c'est d'assembler les 4 valeurs de 1 octet chacun pour en faire un DWORD 4 octets ce que je fais avec ma macro.
Si tu débute, je ne crois pas que tu comprendra quelque chose à décalement de bits et OR binaire et comme je suis extremement mauvais dans les explications (surtout pour les non-initiés), je laisse à ton prof (ou à un autre membre) le soin de t'expliquer tout ça en détail. Pour vulgariser, on peut faire comme suit:
0x20<<24 -> On tasse 0x20 à l'extreme gauche de notre DWORD
|0xD8<<16 -> On le fait suivre de 0xD8
|0xE0<<8 -> Lui même est suivit de 0xE0
|0x30 -> On insert la dernier valeur 0x30 à l'extreme droit du DWORD

On obtien donc: 0x20D8E030

Quand je dit que convertir un DWORD vers int n'a pas de sens c'est que l'on peut très bien faire:
int i = 0xFFDDEE00;
et
DWORD i = 2565235;

Un entier, de toute façon, sera transformé en hexa lors de la compilation, car c'est la même chose. Pour vulgariser un max, je dirais que la seule différence entre un nombre entier et un nombre hexa c'est que l'entier est compréhensible par l'homme et que l'hexa est compréhensible par la machine. Comme c'est la machine qui fait tout le travail, elle utilisera donc ce qu'elle comprend.

C++ (@++)

jeudi 15 mars 2007 à 16:01:51 | Re : Coonversion Héxa - Décimale

2bhq

Merci encore. En fait j'avais bien compris l'histoire de décalage, c'est plus la definition de la macro et son utilisation dans mon code que je ne vois pas trop.

Merci de ton aide
jeudi 15 mars 2007 à 16:42:57 | Re : Coonversion Héxa - Décimale

2bhq

En fait c'est bon j'ai tout capté. Merci bcp encore


Cette discussion est classée dans : secteur, décimale, uchar, héxa, coonversion


Répondre à ce message

Sujets en rapport avec ce message

Fonction permettant de savoir si l'ordi portable est sur batterie, ou sur secteur [ par backhanakin ] Voila je recherche une fonction qui pourrai me dire si l'ordi est branché a son socle (donc sur secteur)ou s'il est sur batteriemercibackhanakin. Fonction permettant de savoir si l'ordi portable est sur batterie, ou sur secteur [ par backhanakin ] Voila je recherche une fonction qui pourrai me dire si l'ordi est branché a son socle (donc sur secteur)ou s'il est sur batteriemercibackhanakin.P.S e Ecriture sur secteur sous windows 9x/Me LOCK pause pb ? [ par MV34 ] Bonjour,Voila mon probleme: J'aimerai ecrire sur un secteur de ma partition. Je travaille sous windows Me (helas ... mais bon )La lecture ne pose aucu Conversion décimale => binaire [ par nicolas66 ] Bonsoir tlm,j'ai un pb un une ptite fonction pas très compliquée à mon avis :char * itob( int n ){ char * chaine; int i = 0; while ( n > 0 ) { *(chai SECTEUR CD ET MFC ??? [ par thierry la fronde ] Salut,Je voudrais faire un petit programme (avec mfc) qui me permettrait de graver une donnée sur un secteur de cdr que j'aurai choisi. Le cd contiend PB avec de l'ASM dans VC++ 6 .... [ par Foub12 ] Bonjour...Je programme sous VC++ 6 et j'ai trouvé sur Internet, la fonction suivante mais elle ne marche pas... Il compile parfaitement mais lors de l Secteur de boot : comment ordonner des commandes ??? [ par Foub12 ] Bonjour,j'ai une question qui me turlupine depuis un petit moment et j'aimerais bien connaître la réponse...Le secteur de boot (d'une disquette par ex reconditionner une batterie.... [ par SooL ] SooLsalut a tous, voila, je voudrai savoir s'il etait possible de créer un programme en C++ qui permet de controler l'e Image CD [ par Benji8892 ] Salut, j'aurais voulu savoir comment lire un cd du secteur 0 piste 0 au dernier secteur, derniere piste et ainsi mettre tous les octets dans un seul f Calcul taille d'un secteur d'un disque dur...avec un peu de maths (aie!) [ par JesusQuintana ] Bonjour à tousJ'aimerais savoir comment calculer la taille d'un secteur de mon disque dur. Infos techniques : Capacité : 5 Giga octets 5 plateaux


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales