Bonjour,
Débutant en C, j'essaye d'écrire une fonction qui puisse afficher les caractères qui ont une valeur comprise entre 128 et 255.
Pour ce-faire, je souhaite utiliser la fonction write.
J'ai trouvé comment fonctionne le principe. Je dois appliquer une sorte de "masque".
En effet, écrire un caractère ascii va toujours demander d'écrire une donnée dont la valeur binaire a un bit de poids fort à zéro.
Exemple:
- 96 a pour correspondance: 00110100 avec un bit de poids fort à zéro.
Pour illustrer le "masque", (pas besoin de plus de deux octets dans mon cas) prenons l'exemple de 161:
- 161 a pour valeur binaire 10100001;
- Mon masque est: 110xxxxx 10xxxxxx;
- J'obtiens 11000010 10100001 (premier octet à 194, deuxième à 161)
- J'utilise le code suivant:
Mon caractère est affiché. Cette façon de faire fonctionne. Maintenant, voici mon problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 unsigned char c; // Ecriture du premier octet c = 194; write(1, &c, 1); // Ecriture du second c = 161; write(1, &c, 1);
Quand je veux réaliser une fonction qui affiche ces caractère, je n'ai jamais la donnée que je veux en entrée.
Voici un échantillon de ma fonction:
Et le problème, c'est que mon char c en entrée, lorsqu'il n'est pas ascii, prend une valeur que je ne comprends pas (souvent -61) et que je ne peux pas travailler avec cette valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void affiche_char(char c) { unsigned char uc; uc = (unsigned char)c; if (uc < 128) write(1, &c, 1); else { //Affiche le résultat de la conversion expliquée au dessus } }
Quelqu'un aurait-il une solution pour que je récupère la vraie valeur de mon caractère non ascii et que je puisse rentabiliser mes fonctions d'affichage?
Merci d'avance pour les éventuelles réponses.
Bon après-midi!
PS: j'ai vu quelque part une personne qui écrivait:Je ne comprends pas cette déclaration (du moins la définition qui la suit) et n'arrive pas à trouver d'explication en ligne. Si au passage vous pouviez m'éclairer sur ça aussi
Code : Sélectionner tout - Visualiser dans une fenêtre à part int c = L'¡';
Partager