Inversion de bit dans un octet [Résolu]

Signaler
Messages postés
5
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
11 juin 2016
-
Messages postés
5
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
11 juin 2016
-
Bonjour, pour une matrice de led, je cherche a inverser la valeur des bits qui me sont donnés par un logiciel ( B01110011 deviendrait B10001100, par exemple). J'aimerais pouvoir le faire depuis un logiciel car il y en a des quantité industrielles. L'idéal étant de pouvoir procéder par copier-coller. Existe t-il une solution simple sachant que je ne suis pas du tout programmeur. Merci de vos réponses.

2 réponses

Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020
98
Bonjour,

C'est une opération des plus simples faisables avec n'importe quel langage de programmation, elle est même directement implémentée par les processeurs.

Par contre, je ne vois pas trop le rapport entre une matrice de LED, et le copier-coller que tu veux faire...

Remarque : mathématiquement on peut faire une soustraction.
11111111-01110011=10001100
Messages postés
5
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
11 juin 2016

Je me suis mal expliqué: j'ai des suites de bits (B11001100, B01010101 ,ceci 15 fois * 200 ) qui me sont données par un logiciel pour représenter un motif (dessin, texte...) dans une matrice de led (un globe rotatif rgb ). Le problème est que mes led sont a anodes communes alors que le projet initial fonctionne avec des led a cathodes communes. Donc , je dois inverser la valeur de tous les bits pour allumer (ou éteindre ) les leds. Je voudrais savoir s'il existe un soft qui pourrait faire cette inversion . ah oui j'oublie : le soft me sort un fichier txt que je dois copier dans l'IDE arduino. C'est ce fichier que je veux copier-coller dans le soft pour qu'il fasse l'inversion et qu'ensuite je le re-copie dans l'IDE. Tout ça pour m’éviter de passer des heures a le faire manuellement car il y en a beaucoup. Voila, j’espère avoir été plus clair, merci
Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020
98
Si j'ai bien compris tu peux :

1) Ouvrir ton fichier .txt (avec le bloc notes ça suffit)
2) Rechercher/Remplacer (Ctrl+H) tout les 0 en 2 (par exemple)
3) Remplacer tout les 1 en 0
4) Remplacer tout les 2 en 1
Messages postés
14858
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 octobre 2020
446 >
Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020

Oui aussi!
Messages postés
5
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
11 juin 2016

Me re-voilà. Oui c'est bien ce que je veux faire , remplacer tous les 0 en1 et tous les 1en 0. J'aurais pu expliquer ça aussi simplement, merci KX,déjà ça m'aide !!!
Messages postés
14858
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 octobre 2020
446
Bonjour,


Ce que tu cherches à faire est relativement simple, même sans trop se compliquer la tâche, plutôt que copier coller tes valeurs, tu peux écrire, un soft qui lit le fichier source et écrit un fichier cible.

Mais si tu ne te sens pas d'essayer, tu dois pouvoir le faire dans Excel.
Ça ne sais pas faire la soustraction en binaire comme propose KX, mis ça sais convertir d'une base vers une autre.
https://support.office.com/fr-fr/article/Convertir-des-chiffres-dans-différents-systèmes-numériques-880eeb52-6e90-4a9d-9e56-acaba6a27560#bmconvert_a_binary_number_to_decimal

Tu ouvres ton fichier, tu convertis en décimal, tu soustrais, et tu convertis le résultat en binaire.
Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020
98
"dans Excel. Ça ne sais pas faire la soustraction en binaire comme propose KX"

Le calcul 11111111-01110011=10001100 est également vrai en décimal ;-)
Messages postés
5
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
11 juin 2016

Merci Whismeril, l'idée d’écrire un soft me parait la meilleure solution plutôt que de convertir une multitude de ligne "a la main". Le problème est au niveau programmation, je sais tout juste faire tourner des moteurs pas a pas en c/c++ avec arduino. Disons que je me débrouille plus en électronique qu'en informatique. En même temps ça me ferais apprendre, ce qui ne serais pas un mal ! Du coup je serais preneur d'exemple ou de tout ce qui pourrait m'avancer.
Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020
98 >
Messages postés
5
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
11 juin 2016

Je pense que programmatiquement le plus simple est de faire exactement ce que je disais plus haut : tu considères l'ensembles de ton fichier, tu remplaces tout les 0 en un caractère pivot (2 par exemple), puis tout les 1 en 0, et tout les pivots en 1.
Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020
98 >
Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020

Exemple en Java :

package ccm.kx;

import java.nio.file.*;

public class TextTools {

    public static String revert(String text, char c1, char c2, char tmp) {
        text = text.replace(c1,  tmp); // c1  ← tmp
        text = text.replace(c2,  c1);  // c2  ← c1
        text = text.replace(tmp, c2);  // tmp ← c2
        return text;
    }

    public static void main(String[] args) throws Exception {
        Path path = Paths.get("C:/test.txt");
        String text = new String(Files.readAllBytes(path));
        text = revert(text, '0', '1', '§');
        Files.write(path, text.getBytes());
    }
}
Messages postés
5
Date d'inscription
samedi 11 juin 2016
Statut
Membre
Dernière intervention
11 juin 2016
>
Messages postés
16055
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 octobre 2020

D'accord j'ai compris et... ça marche !!! En fait c'est très simple, je ne connaissais pas le control+H ( ca m'apprendra a consulter les manuels !!). Mille merci KX et bonne soirée a toi.