Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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é roll

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