Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] QBitArray

operator>>

    12 juin 2008 à 12:00:28

    :) Bonjour !
    Je voudrais ouvrir un fichier en mode binaire, avec Qt4.4, dans un QbitArray pour pouvoir utiliser l'opérateur XOR (^) !
    if (!fich.open(QIODevice::ReadOnly))
        {
        QMessageBox::warning(this,"erreur!","problème d'ouverture du fichier");
        return;
        }
    
        QDataStream in(&fich);
           QBitArray ch();
           in>>ch;
    

    Quelqu'un pourrait-il me dire ou j'ai fait une erreur ?
    merci ! :(
    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2008 à 12:27:27

      Salut,

      Comment sais-tu qu'il y a une erreur ? ça plante ? ça ne compile pas ? résultat inattendu ?
      Plus tu sera précis, plus on saura où chercher ;)

      QBitArray ch();
      

      Sauf erreur, ici tu ne créés pas une instance de QBitArray, mais tu déclares une fonction qui retourne un QBitArray.
      Enlève ces parenthèses ;)
      • Partager sur Facebook
      • Partager sur Twitter
        12 juin 2008 à 12:39:00

        ;) salut et merci de ton aide !
        En fait j'ai vu dans la doc de QBitArray :
        QDataStream & operator>> ( QDataStream & in, QBitArray & ba )
        

        et aussi :
        QBitArray operator^ ( const QBitArray & a1, const QBitArray & a2 )
        Returns a bit array that is the XOR of the bit arrays a1 and a2.
        The result has the length of the longest of the two bit arrays, with any missing bits (if one array is shorter than the other) taken to be 0.
        Example:
                 QBitArray a(3);
                 QBitArray b(2);
                 QBitArray c;
                 a[0] = 1; a[1] = 0; a[2] = 1;   // a: [ 1, 0, 1 ]
                 b[0] = 1; b[1] = 0;             // b: [ 1, 1 ]
                 c = a ^ b;                      // c: [ 0, 1, 1 ]
        See also QBitArray::operator^=(), operator&(), and operator|().
        

        Ce qui est parfait pour ce que j'essaye de faire ! un petit crypteur de fichier avec l'operateur XOR, inspiré du tuto en C sur ce site !XOR
        Donc ma fonction pour l'instant ressemble à ça :
        void Krypton::crypt()
        {
            QString fichCod=QFileDialog::getSaveFileName(this,"Fichier à sauvegarder","C:");
            QString fichNor=ui.chemin->text();
            QString key=ui.secret->text();
            QFile fich (fichNor);
            QFile fich2 (fichCod);
        
            if (!fich.open(QIODevice::ReadOnly))
            {
            QMessageBox::warning(this,"erreur!","problème d'ouverture du fichier");
            return;
            }
        
            QDataStream in(&fich);
               QBitArray ch();
               in&>>&ch;
        }
        

        mais la console me dit :
        expected primary-expression before '>>'


        • Partager sur Facebook
        • Partager sur Twitter
          12 juin 2008 à 12:48:59

          in&>>&ch;
          

          Pourquoi mets-tu des & ? Car tu les as vu ici :
          QDataStream & operator>> ( QDataStream & in, QBitArray & ba )
          

          ?
          Dans ce cas revois le concept de référence.
          Il ne faut pas de & ici.
          ---

          QBitArray ch();
          

          voir premier post.

          ;)
          • Partager sur Facebook
          • Partager sur Twitter
            12 juin 2008 à 13:03:26

            re :)
            pour
            QBitArray ch();
            
            c'est fait
            QBitArray ch;
            

            Ensuite je déclare 2 autres QBitArray : clé et xor, pour pouvoir comparer ch^cle.
            Le problème c'est que mon "QBitArray cle" correspond à un QString key qui la clé entrée par l'utilisateur, et j'ai trouvé que : "QByteArray toLocal8Bit () const"
            qui convertit un QString en QByteArray et pas en QBitArray :(
            C'est plus compliqué que je pensais ! peut devrais-je utiliser des QByteArray à la place ???
            Pourtant j'ai bien compris le tuto en C, mais là avec toutes les variables Qt c'est casse tête !
            Dommage car QBitArray me semle parfait pour ce type d'opérations ....

            • Partager sur Facebook
            • Partager sur Twitter
              12 juin 2008 à 13:30:43

              Si tu veux vraiment un QBitArray, tu peux passer également par un QDataStream :
              QString key_str("plop");
              
              // http://doc.trolltech.com/4.4/qstring.html#operator-lt-lt-154
              QDataStream key_stream;
              key_stream << key_str;
              
              // http://doc.trolltech.com/4.4/qbitarray.html#operator-gt-gt-52
              QBitArray key_bit;
              key_stream >> key_bit;
              

              ;)
              • Partager sur Facebook
              • Partager sur Twitter

              [Qt] QBitArray

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown