Accueil > Forum > > > > printf de char en hexadécimal affiche un byte en 4 caractères ?
printf de char en hexadécimal affiche un byte en 4 caractères ?
lundi 12 mars 2007 à 16:56:58 |
printf de char en hexadécimal affiche un byte en 4 caractères ?

develdelphi
|
Bonjour,
Le printf de mon compilateur génère des erreures d'affichages, en effet je dipose de variables unsigned char que je voudrais affichées en héxadécimal (%X).
Donc je travaille avec les registres d'un microcontrolleur et comme il s'agit de registre 8 bits (1 byte), j'ai donc déclaré des unsigned char (1 byte) pour les afficher en hexa et ainsi connaitre les etats des registres. Mais quand je fais un printf j'affiche mon byte non pas en 2 caractèers mais bien 4?
code: extern xdata Byte volatile ide_status_register _at_ address; printf("ide_status_register : %X\n\r", ide_status_register);
affichage: ide_status_register : D803 //erreur 03
La valeur du regsitre est D8, remarquez la presence de deux caractères hexa aléatoires (03) qui gênent.
Alors qu'avec un int on a bel bien deux caractères hexadécimaux comme il se doit. code: int tstprntf1 = 45; int tstprntf2 = 31; printf("int 45: %X\n\r", tstprntf1); printf("int 31: %X\n\r", tstprntf2);
affichage: int 45: 2D int 31: 1F
Comment pourrais je pallier ce genre de données supplementaires, car c'est très vite genant dans des applications tel que lecture dans un secteur du disque dur.
Faut-il convertir les char en int puis afficher peut etre par des strings?
Merci
|
|
mardi 13 mars 2007 à 18:43:59 |
Re : printf de char en hexadécimal affiche un byte en 4 caractères ?

vdust
|
Le symbole %X est utilisé pour convertir un entier en hexadécimal (tel que spécifié dans la page de man de la fonction printf). Donc lorsque tu fais printf ("%X", toto); avec toto un unsigned char, printf va lire 4 octets : celui de toto plus les 3 suivants ; ce qui conduit à ton "erreur" supposée. En fait, c'est tout à fait normal. En effet, le prototype de printf est printf (const char *format, ...);en d'autres termes, elle prend un nombre variable d'arguments, et ne connait pas a priori leur type... si ce n'est par l'intermédiaire des symboles présents dans la chaîne de format. La bonne manière de procéder est donc de convertir explicitement ton unsigned char en int dans le printf : printf("ide_status_register : %X\n\r", (int) ide_status_register); -- Virtual Dust --
|
|
mardi 13 mars 2007 à 22:33:53 |
Re : printf de char en hexadécimal affiche un byte en 4 caractères ?

develdelphi
|
Salut,
Merci pour ces infos. Et justement j'y suis arrive en passant le unsigned char a un int puis j'affichais avec le printf le int et la il n'y a plus les deux caracteres parasites qui apparaissaient pour les chars. C'est vrai que la conversion dans le printf sera mieux.
Mais bref le probleme d'origine n'est toujours pas resoud. Malgres
cette modif, la lecture des 512 bytes d'une adresse d'un secteur d'une carte
CompactFlash ne faite apparaitre que un byte sur deux de ce secteur. C'est comme ci la lecture
se fesait en 16 bits?
La librairie que j'utilise est en 8 bits
mais au niveau hardware je suis en 16 bits mais bien sur mon
microcontrolleur Atmel (AT89C51SNDC1) me permet de passer en mode 8
bits par configuration du registre AUXR. Du cote de la carte CF, j'envoi une commande pour etre aussi en 8 bits :
Ide_set_feature(IDE_ENABLE_8_BIT_TRANSFERT); Ide_send_command(ATA_CMD_SET_FEATURES); /* Set Features */
Je
pense plutot qu'il s'agit d'un probleme de software mais sinon ce
serait du cote de la CompactFlash, le True Ide Mode qui ne s'active pas?
Sauriez vous m'aider ?
Merci
|
|
mercredi 14 mars 2007 à 01:00:39 |
Re : printf de char en hexadécimal affiche un byte en 4 caractères ?

vdust
|
Serait-il possible de voir le code complet chargé de lire ces fameux 512 octets ? D'autre pars, je ne sais pas comment fonctionne cet fonction Ide_set_feature dans le cas présenté, mais mon intuition me laisse penser que la constante IDE_ENABLE_8_BIT_TRANFERT se contente d'autoriser les transferts dans ce mode, sans pour autant l'activer (le y aurait-il une constante du genre IDE_USE_8_BIT_TRANSFERT ?). Pour ce qui est de la lecture par bloc de 16 bits, cela doit être facile à vérifier, en récupérant les valeurs non pas dans des unsigned char, mais dans des unsigned short et d'afficher ces derniers. -- VDust --
|
|
mercredi 14 mars 2007 à 09:02:43 |
Re : printf de char en hexadécimal affiche un byte en 4 caractères ?

develdelphi
|
Salut Vdust,
En fait tu as déjà un aperçu de mon code sur ce topic, je peux aussi te l'envoyer.
Merci
|
|
mercredi 14 mars 2007 à 09:04:29 |
Re : printf de char en hexadécimal affiche un byte en 4 caractères ?
|
Cette discussion est classée dans : int, printf, byte, char, caractères
Répondre à ce message
Sujets en rapport avec ce message
concatenation [ par asmv ]
//a partir d'elements de tableau 'int' transformes en 'char'//essai de concatenation qui ne fonctionne pas pourquoi ?//merci pour votre aide#include #
Hachage fermé problème de lecture [ par mcflysupersonic ]
Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un
segmentation fault help [ par alabb ]
aidez moi je suis un new bie, j'ai un segmentation fault a la fin du prog:si gagant apres avoir affiché WINNERsi perdant apres avoir affiché "votre s
oh non!! [ par bako25 ]
Le prog suivant calcule le nombre des 'e' dans un paragraphe: #include #include<
problem avec un char[] [ par kibab ]
Bounour a vous tous, je suis nouveau de ce langage et je m'amuse à faire des épreuves diverses.Ici il y a un petit example mais jái un problem:#includ
Lecture et ecriture sur fichier [ par developvbdebut ]
Bonjour tout le mondeJe travaille sur la gestion des fichier en c.Mon livre n'explique pas clairement l'ectriture et la lecture dans les fichiers.Voic
Ouvrir et afficher un fichier texte en C [ par AsM0DeUz ]
'lut Je m'initie actuellement au C. Apres avoir fait les exos les plus basiques ... je passe au basique niveau 2 J'ai ecris qques lignes pour afficher
probleme affichage structure [ par lil_adriano ]
Slt tous le monde j'ai un souci avec l'affichage de mes structures. je dois faire la gestion d'une pizzeria.j'ai cree les structure et quelques proced
trier un tableau de stucture en c [ par peli20 ]
[^^happy13]salut, j ai un petit probleme en c ,j espere que vous m aidiez.. bon, j essaie d elaborer un programme faisant la gestion des contact, le r
aide pour realiser une repertoire telephonique en langage c [ par djamel000 ]
Bonjour , je souhaiterai réaliser un répertoire téléphonique à accès sécurisé(cryptage des données par mot de passe)et recherche rapide de coordonnées
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|