Pages : 1
#1 Le 29/08/2008, à 00:07
- albouy
Affichage du contenue d'un char
Bonjour,
je souaiteret afficher le contenu decimale d'un char
int main() {
iopl(3);
ioperm(0,0x400,1); //demande l'acces au port ps2
unsigned char mbuf[512];
while(1){
//kprintf((char *) &mbuf, 0x0F);
kReadFromCmd(mbuf);// lit le port ps2
printf("%d", mbuf[0]); // affiche la valeur
sleep(1);//attendre 1sec
}
return 1;
}
ce programme m'affiche caractere que j'ai tapé et pas sa valeur que je souhaite récupere:/
Merci, romain
#2 Le 29/08/2008, à 06:36
- robrob
Re : Affichage du contenue d'un char
Je ne suis pas sûr de comprendre mais:
#include <stdio.h>
int main(void)
{
char toto='a';
printf("%c\n",toto);
printf("%d\n",toto);
return 0;
}
Le premier print t'affiche le caractère, "a", le deuxième son code ASCII, 97.
Dernière modification par robrob (Le 29/08/2008, à 06:36)
Hors ligne
#3 Le 29/08/2008, à 06:43
- albouy
Re : Affichage du contenue d'un char
oui c'est cela, je vais essayer.
car printf("%d", mbuf[0]); ne m'afficher pas la valeur ascii mais seulement la lettre comme un %c
je vais essayer
merci
#4 Le 29/08/2008, à 06:53
- albouy
Re : Affichage du contenue d'un char
bon ba sa ne marche toujour pas
voici le code
// Ports PS/2
#define PS2_COMMAND 0x64
#define PS2_DATA 0x60
// Prototypes
char kReadFromData (unsigned char *buf);
void kReadFromCmd (unsigned char *buf);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/io.h>
// Fonction qui permet la lecture des paquets envoyés par le port PS/2 sur le port de data
// Paramètres : - unsigned char *buf : octet qui contiendra la valeur envoyée par le port
char kReadFromData (unsigned char *buf) {
int i = 0;
char in = inb (PS2_COMMAND);
// On vérifie si on peut lire
while (!(in & 1)) {
in = inb (PS2_COMMAND);
i++;
if (i == 65535) { // Erreur, délai d'attente dépassé
return 0;
}
}
// On lit le packet et on le stock dans le buffer
*buf = inb (PS2_DATA);
return 1; // Tout s'est bien passé
}
// Fonction qui permet la lecture des paquets envoyés par le port PS/2 sur le port de commande
// Paramètres : - unsigned char *buf : octet qui contiendra la valeur envoyée par le port
void kReadFromCmd (unsigned char *buf) {
*buf = inb (PS2_COMMAND);
}
int main() {
iopl(3);
ioperm(0,0x400,1);
unsigned char mbuf[0];
while(1){
//kprintf((char *) &mbuf, 0x0F);
kReadFromCmd(mbuf);
// if(mbuf[0]==0x1C)
printf("%d", mbuf);
sleep(1);
}
return 1;
}
ha j'ai un resultat qui s'affiche,
zddfdfefefcdc-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-1080368492-
c'est pas de l'ascii sa. d'autan plus que que sa depase largement de mon char
#5 Le 29/08/2008, à 08:48
- Didi31
Re : Affichage du contenue d'un char
Coucou Albouy,
c'est normal que ça ne marche pas car %d signifie que l'argument à suivre est un entier signé sur 4 octets si ton système est 32 bits. Il faut que tu remplaces par %1u (un entier non signé sur 1 octet ).
Bon courage
Didier
#6 Le 29/08/2008, à 09:11
- Didi31
Re : Affichage du contenue d'un char
M'a suis trompé
C'est parce que tes charactères sont signés. Il faut donc ajouter une petite conversion vers (unsigned char) :
voilà le petit programme de test :
#include <stdio.h>
main()
{
unsigned char c;
for (c='A'; c<255 ;c++)
printf("%hu\n", (unsigned char) c);
}
Et là, du coup, ça va mieux.
#7 Le 29/08/2008, à 23:38
- albouy
Re : Affichage du contenue d'un char
merci, sa m'arrange beaucoup
Au revoir, romain
#8 Le 30/08/2008, à 08:46
- nicolas.sitbon
Re : Affichage du contenue d'un char
personne ne sait dont afficher un unsigned char en décimal?
#if !defined (__STDC__) || !defined (__STDC_VERSION__) || __STDC_VERSION__ != 199901L
#error please use -std=gnu99 with gcc parameters
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/io.h>
#include <unistd.h>
// Ports PS/2
#define PS2_COMMAND 0x64
#define PS2_DATA 0x60
// Fonction qui permet la lecture des paquets envoyés par le port PS/2 sur le port de data
// Paramètres : - unsigned char *buf : octet qui contiendra la valeur envoyée par le port
static char kReadFromData (unsigned char *buf)
{
int i = 0;
char in = inb (PS2_COMMAND);
// On vérifie si on peut lire
while ((in & 1) == 0)
{
in = inb (PS2_COMMAND);
i++;
if (i == 65535)
{ // Erreur, délai d'attente dépassé
return 0;
}
}
// On lit le packet et on le stock dans le buffer
*buf = inb (PS2_DATA);
return 1; // Tout s'est bien passé
}
// Fonction qui permet la lecture des paquets envoyés par le port PS/2 sur le port de commande
// Paramètres : - unsigned char *buf : octet qui contiendra la valeur envoyée par le port
static void kReadFromCmd (unsigned char *buf)
{
*buf = inb (PS2_COMMAND);
}
int main (void)
{
iopl (3);
ioperm (0, 0x400, 1);
while (1)
{
unsigned char mbuf;
kReadFromCmd (&mbuf);
printf ("%hhu ", mbuf);
fflush (stdout);
sleep (1);
}
return 0;
}
Hors ligne