Changer un bit dans une chaine binaire d'un octet ???

Résolu
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017 - 17 juin 2010 à 19:23
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017 - 18 juin 2010 à 17:16
Bonsoir à tous,

Voilà, le titre donne une idée générale sur mon problème,
<?
$bin = 10010011;
?>

J 'ai déjà pu accéder au bit numéro 2 en effectuant un masque binaire 10, mais j'ai pas pu le modifier, c'est un 1 et je veux mettre un 0 à sa place sans que j'affecte des modifications aux 7 autres bits.
10010011 --> 100100[color =black]01/color

Si vous me proposez une autre méthode que le masque, assurez vous SVP qu'elle n'altère pas les 7 autres bits, j'en ia vraiment besoin, merci.
J'ai posté un message précédemment et j'ai été aidé, j'ai implémenté ce petit code :


$nbr_binaire = 10010001;
echo "Le nombre binaire :".$nbr_binaire."
";
$masque_binaire = 10;
echo "Le masque binaire :".$masque_binaire."

";

$nbr_decimal = bindec($nbr_binaire);
$masque_decimal = bindec($masque_binaire);
$bit = $nbr_binaire & $masque_binaire;

echo "l'operation :".$nbr_binaire." ET ".$masque_binaire." = ".$bit."
" ;

echo "le bit numéro ".$masque_decimal." est : ";
if ($bit <> 0) echo "1";
else echo "0";

J'ai ajouté des echo, juste pour le rendre compréhensible...

En attente d'une repenses ou des réponses favorables, mes amis
Acceptez mes sincères remerciement pour vos aides les plus précieux.

12 réponses

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
18 juin 2010 à 15:01
Je t'avoue que je n'apprécie pas la façon avec laquelle tu t'adresses à nous.. mais cela n'est que mon avis.
Et pour te faire un minimum comprendre que ça marche voici une fonction:

$b1 = 10010111;
function invertRow($n,$row){
 return decbin(bindec($n)^(pow(2,$row-1)));
}
echo invertRow($b1,5); //On inverse le 5ème en partant de la droite..
//On obtient 10000111

Ca te va ??
S.
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 juin 2010 à 19:35
Salut

regardes les operateur booleen

& | << et >>

http://www.commentcamarche.net/contents/php/phpop.php3
0
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
17 juin 2010 à 19:41
re

oui, merci mon ami, mais je connais deja tous ca:
& c'est le et
| c'est le ou
<< décalage vers la gauche
>> décalage vers la droite

j'ai déjà lu l'article de commentcamarche, php.net ....


je veux une explication mon ami, pas une redirection vers un article merci comme même.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 juin 2010 à 19:55
C'est expliqué
paragraphe
Les opérateurs bit-à-bit

Je ne peux mieux!

Il faut travaillé sur les entiers c'est tout et pas sur la présentation binaire
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
17 juin 2010 à 19:59
Enfaite, j'ai besoin du binaire, parce que je suis dans une application de stéganographie, je travaille avec les LSB..

Et les pour les opérateurs de bit à bit, oui j'ai déjà lu tout l'article de commentcamarche, et d'autres aussi ...

je cherche toujours à une solution à mon problème...



Merci de m'aider.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
17 juin 2010 à 20:04
http://www.php.net/manual/en/function.base-convert.php

Tu dois travailler avec cette fonction ?

Regardes les exemples à la fin, il y a peut être une partie de la reponse à ton probleme
0
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
17 juin 2010 à 20:22
merci de m'aider nhervagault, mais c'est pas ça, la fonction base_convert convertit un nombre de quelconque base à une autre base par exemple :

<?php
$hexadecimal = 'A37334';
echo base_convert($hexadecimal, 16, 2);
?>
qui convertit A37334 du hex en binaire.

Merci, mais je cherche autre chose.
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
18 juin 2010 à 08:52
Etant donné que tu travailles sur des binaires.. 'changer' veut dire passer 0 à 1 et 1 à 0.. Avec des opérateurs binaires && et || tu peux y arriver.
S.
0
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
18 juin 2010 à 11:07
Si vous me proposez une autre méthode que le masque, assurez vous SVP qu'elle n'altère pas les 7 autres bits, j'en ia vraiment besoin, merci.
jeudi 17 juin 2010 à 19:23:42
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
18 juin 2010 à 11:21
Pourquoi veux-tu qu'on te propose une autre méthode alors qu'un masque en XOR pourrait convenir.. J'ai un peu l'impression que tu attends que ça tombe direct.non ??
S.
0
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
18 juin 2010 à 12:39
Je n'ai pas dis que je veux pas une autre méthode, j'ai seulement dis SI vous me proposez...alors

Le XOR ca ne marche pas, SVP comprenez le problème avant de répondre.

Une chaine binaire de 8 bits par exemple : 10010111
je veux mettre un 0 à la place de celui qui est en gras sans modifier les autres bits.
J'ai appliquer les masque 1,2,3,4,5 en "ET" et en "OU" et en "XOR", et le résultat est bon mais il modifie le bit de poids le plus faible c'est ca le problème, et je ne veux qu'aucun bit ne change de valeur.

Alors si vous pouvez m'aider à trouver une solution, merci, si vous pensez que qqch marche alors expliquez comment, ne me dites pas que cela pourrait convenir ou autres choses merci.

J'ai bien expliqué le problème en haut, merci de le lire, et si vous ne l'avez pas compris vous pouvez l'exécuter et voir le résultat.

Enfin merci de vos réponses, si quelqu'un à une solution merci de la partager.

Bonne après midi mes amis.
0
jarodjarod Messages postés 49 Date d'inscription samedi 7 juillet 2007 Statut Membre Dernière intervention 5 mai 2017
18 juin 2010 à 17:16
Ça marche enfin ........., merci pour ta fonction, et le temps que tu as pris pour me répondre.
Vraiment, merci beaucoup SYNDRAEL, NHERVAGAULT.

Je m'excuse de ma façon de parler, je vous assure que je voulais pas vous manquer de respect ou quelque choses d'autres,

Acceptez mes sincères excuses et remerciement.


Merci.
Jarod.
0
Rejoignez-nous