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

jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention - 17 juin 2010 à 19:23 - Dernière réponse : jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention
- 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 

12 réponses

Répondre au sujet
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 18 juin 2010 à 15:01
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de syndrael
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 17 juin 2010 à 19:35
0
Utile
Salut

regardes les operateur booleen

& | << et >>

http://www.commentcamarche.net/contents/php/phpop.php3
Commenter la réponse de nhervagault
jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention - 17 juin 2010 à 19:41
0
Utile
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
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 17 juin 2010 à 19:55
0
Utile
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
jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention - 17 juin 2010 à 19:59
0
Utile
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
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 17 juin 2010 à 20:04
0
Utile
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
jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention - 17 juin 2010 à 20:22
0
Utile
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
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 18 juin 2010 à 08:52
0
Utile
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
jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention - 18 juin 2010 à 11:07
0
Utile
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
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 18 juin 2010 à 11:21
0
Utile
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
jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention - 18 juin 2010 à 12:39
0
Utile
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
jarodjarod 49 Messages postés samedi 7 juillet 2007Date d'inscription 5 mai 2017 Dernière intervention - 18 juin 2010 à 17:16
0
Utile
Ç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.