Changer un bit dans une chaine binaire d'un octet ??? [Résolu]

Signaler
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2017
-
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2017
-
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

Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
Salut

regardes les operateur booleen

& | << et >>

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

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.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
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
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2017

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.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
32
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
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2017

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.
Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2017

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
Messages postés
2380
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2017

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.
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2017

Ç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.