Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Convert a QByteArray in Hex to a Struct
Forum Updated to NodeBB v4.3 + New Features

Convert a QByteArray in Hex to a Struct

Scheduled Pinned Locked Moved Solved General and Desktop
19 Posts 5 Posters 2.1k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #7

    Would it be possible for you to request to know how it's done ?

    If the writing is done using QDataStream it will simplify things.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    DSpiderD 1 Reply Last reply
    2
    • DSpiderD Offline
      DSpiderD Offline
      DSpider
      wrote on last edited by
      #8

      @mrjj well its a Qt app too, but I don't have more information. I have the structure of the file, I am able to decode it using QDataStream if I do it element by element. But I was wondering if there is a more simpler way to it ?

      1 Reply Last reply
      0
      • SGaistS SGaist

        Would it be possible for you to request to know how it's done ?

        If the writing is done using QDataStream it will simplify things.

        DSpiderD Offline
        DSpiderD Offline
        DSpider
        wrote on last edited by
        #9

        @SGaist I think it is done with QDataStream, because in the struct there is even the version of it. Supposing it is the case, how can I do then ?

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #10
          QDataStream in(fileData);
          
          struct header;
          in >> header;
          

          You should check whether the QDataStream used has its version set. If not, then you should suggest to add that so that you can ensure that if a future version of Qt changes some aspect of the QDataStream protocol you can still read the old files you have generated.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          DSpiderD 1 Reply Last reply
          3
          • SGaistS SGaist
            QDataStream in(fileData);
            
            struct header;
            in >> header;
            

            You should check whether the QDataStream used has its version set. If not, then you should suggest to add that so that you can ensure that if a future version of Qt changes some aspect of the QDataStream protocol you can still read the old files you have generated.

            DSpiderD Offline
            DSpiderD Offline
            DSpider
            wrote on last edited by
            #11

            @SGaist Thank you, I 'll try that right now. However, the header is actually on the first 1024 bytes of the file. Is there a way to read only this part ?

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #12

              if the writing was done like this:

              QDataStream out(file);
              out << myStruct:
              

              then there's nothing special to do.

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              DSpiderD 1 Reply Last reply
              2
              • SGaistS SGaist

                if the writing was done like this:

                QDataStream out(file);
                out << myStruct:
                

                then there's nothing special to do.

                DSpiderD Offline
                DSpiderD Offline
                DSpider
                wrote on last edited by
                #13

                @SGaist I tried to do it this way but it says "invalid operand to binary expression ('QDataStream' and 'struct header').

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #14

                  I knew I was forgetting something, you have to implement the QDataStream operator for the structure.

                  Which is something that has likely be done for the other application. The operators implementation boils down to sending each field to the output stream and read each field from the input stream.

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  DSpiderD 1 Reply Last reply
                  2
                  • fcarneyF Offline
                    fcarneyF Offline
                    fcarney
                    wrote on last edited by fcarney
                    #15

                    @SGaist said in Convert a QByteArray in Hex to a Struct:

                    The operators implementation boils down to sending each field to the output stream and read each field from the input stream.

                    I was wondering about that. I read a bunch of articles last week about transferring binary data. Two of the major concerns are binary alignment/packing and endianess. Does the QDataStream address both of those issues? I am more concerned with the alignment/packing as all our systems are little endian. The alignment/packing can change if compiler settings are changed.

                    Edit:
                    Sorry, I should have just looked it up:
                    http://doc.qt.io/qt-5/qdatastream.html

                    C++ is a perfectly valid school of magic.

                    1 Reply Last reply
                    0
                    • SGaistS SGaist

                      I knew I was forgetting something, you have to implement the QDataStream operator for the structure.

                      Which is something that has likely be done for the other application. The operators implementation boils down to sending each field to the output stream and read each field from the input stream.

                      DSpiderD Offline
                      DSpiderD Offline
                      DSpider
                      wrote on last edited by
                      #16

                      @SGaist Thank you. So it should look something like this ( which I am writting now):

                      friend QDataStream &operator>> (QDataStream &in, header &head)
                          {
                              in >> head.field1 >> head.field2.....;
                              return in;
                          }
                      
                      1 Reply Last reply
                      1
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #17

                        Yes it is, but you have to ensure the the writing was done in the same order.

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        DSpiderD 1 Reply Last reply
                        0
                        • SGaistS SGaist

                          Yes it is, but you have to ensure the the writing was done in the same order.

                          DSpiderD Offline
                          DSpiderD Offline
                          DSpider
                          wrote on last edited by
                          #18

                          @SGaist Thanksssssssss to the infinity. That saved me tonight ! It's working.
                          I'm a noob on Qt, and do not have any clue on how it works, even C++ I'm not very familiar too.
                          Thank you all for your help.

                          1 Reply Last reply
                          0
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #19

                            You're welcome !

                            Qt is C++ so by learning the second you'll be able to master the first :)

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            3

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved