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

Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Dernière intervention
5 mai 2017
- - Dernière réponse : jarodjarod
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
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.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
3
Merci
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.

Merci syndrael 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de syndrael
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
0
Merci
Salut

regardes les operateur booleen

& | << et >>

http://www.commentcamarche.net/contents/php/phpop.php3
Commenter la réponse de nhervagault
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Dernière intervention
5 mai 2017
0
Merci
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.
Commenter la réponse de jarodjarod
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
0
Merci
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
Commenter la réponse de nhervagault
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Dernière intervention
5 mai 2017
0
Merci
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.
Commenter la réponse de jarodjarod
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
0
Merci
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
Commenter la réponse de nhervagault
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Dernière intervention
5 mai 2017
0
Merci
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.
Commenter la réponse de jarodjarod
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
0
Merci
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.
Commenter la réponse de syndrael
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Dernière intervention
5 mai 2017
0
Merci
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
Commenter la réponse de jarodjarod
Messages postés
2382
Date d'inscription
lundi 4 février 2002
Dernière intervention
29 décembre 2012
0
Merci
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.
Commenter la réponse de syndrael
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Dernière intervention
5 mai 2017
0
Merci
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.
Commenter la réponse de jarodjarod
Messages postés
49
Date d'inscription
samedi 7 juillet 2007
Dernière intervention
5 mai 2017
0
Merci
Ç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.
Commenter la réponse de jarodjarod

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.