voila je fais une application qui envoi un caractere (char) à un processus et je dois savoir de quel processus il vient pour faire le bon traitement...
donc si c le processus 1, je voudrais mettre le bit 7 à 1 du char
et sinon je le laisse à 0...
et je voudrais aussi savoir comment on voit si le bit 7 apres le passage dans le tube est à 1, et si oui, comment enlever le 1 devant...
Il faut jouer avec les opérateur bit à bit | et & (dans cet exemple j'ai supposé que le "bit 7" était le 7eme en partant de la gauche):
char c; // char a modifier
// modifier le bit:
c = c | 2; // pour mettre le bit 7 à 1 (2== 00000010 en binaire )
c = c & 253; // pour mettre le bit 7 à 0 (253== 11111101 en binaire )
//lire le bit :
bool bit = c & 2; // bit==true si le bit 7 est à 1, false sinon
Voila cela doit être bon ( mais fait sans test alors à vérifier).
Normalement, les bits sont représentés de gauche à droite par leurs puissances de 2:
76543210
10101010
Ainsi le bit 7 est le premier à gauche. Il a donc le poids le plus fort dans un octet.
Pour mettre ce bit à 1 il suffit d'appliquer un OR à l'octet avec la
valeur 0x80. Pour le mettre à 0 on lui applique un AND avec l'inverse
bit à bit de la valeur 0x80. Pour savoir si ce bit 7 est à 1 on teste
l'octet avec la valeur 0x80. Exemple:
ben en faite toute marche bien sur des caracteres sans accent et chiffres mais dès que y a un accent ca va plus car le bit 7, donc le 8 est à 1 dès qu'on met un accent, donc impossible de savoir...