Mask binaire???

cs_kraven Messages postés 13 Date d'inscription jeudi 30 août 2001 Statut Membre Dernière intervention 13 novembre 2013 - 23 mai 2012 à 14:44
cs_kraven Messages postés 13 Date d'inscription jeudi 30 août 2001 Statut Membre Dernière intervention 13 novembre 2013 - 25 mai 2012 à 10:01
Bonjour,

N'étant pas développeur et souhaitant rapidement faire une petite appli en PHP, j'ai une question.

J'ai un appareil qui dispose d'une MIB et que je peux l'interroger via le protocole SNMP.

J'arrive à récupérer toutes les infos de la MIB et les stocker dans un tableau de variable en PHP.

Mon souci est que certaines valeurs demandent à être exploitées via des mask binaire et là je suis perdu.

J'ai par exemple.

La valeur retournée est un entier de 0 à 255 et on me dit dans la doc de la MIB

Valeur (bit a 0 pour non ouvert)
- bit 0 : état de porte 1
- bit 1 : état de porte 2
- bit 2 : état de porte 3
- bit 3 : état de porte 4
- bit 4 : état de porte 5
- bit 5 : état de porte 6
- bit 6 : état de porte 7
- bit 7 : état de porte 8
Signification de la valeur des bits : 0 pour porte fermée, 1 pour porte ouverte

Si je stock cette valeur dans la varibale MIB[15] comment puis-je faire pour extraire la valeur de chaques bits?

Merci

3 réponses

cs_L0ci Messages postés 224 Date d'inscription vendredi 26 novembre 2010 Statut Membre Dernière intervention 11 juin 2013 7
23 mai 2012 à 16:12
Bonjour,

quelque chose comme ceci devrait fonctionner:
for($i = 0; i < sizeof($MIB);++$i){
    echo $MIB[$i];
}
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
24 mai 2012 à 02:19
Salut,

@L0ci: Désolé mais tu as tout faux.

@kraven: Ce que tu as c'est un entier. Cet entier est représenté en mémoire par une série de bits, dans le cas présent 8. Ce que tu dois faire c'est utiliser l'opérateur binaire ET (AND, symbole &) avec des masques afin de connaître la valeur d'un bit.

Rappel :
0 & 0 = 0
1 & 1 = 0
1 & 0 = 0
0 & 1 = 1

Exemple :

Tu as le nombre 124. En binaire ça donne 01111100. Pour connaître la valeur d'un bit on utilise le masque qui contient 0 partout sauf au bit qui nous intéresse. On regarde le résultat du AND, s'il est égal à 0, alors il y avais 0, s'il est différent de 0 (égal au masque) alors c'était un 1.
124 & 1 0 (01111100 & 00000001 00000000)
124 & 2 0 (01111100 & 00000010 00000000)
124 & 4 4 (01111100 & 00000100 00000100)
124 & 8 8 (01111100 & 00001000 00001000)
0
cs_kraven Messages postés 13 Date d'inscription jeudi 30 août 2001 Statut Membre Dernière intervention 13 novembre 2013
25 mai 2012 à 10:01
Merci pour vos réponses.

Donc la méthode LOci ne fonctionne pas et je ne comprend pas comment mettre en oeuvre la méthode de TychoBrahe.

Peu-être un bout de code?
0
Rejoignez-nous