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. How to convert ’QString 1’ to ’unsigned char’ (solved)
QtWS25 Last Chance

How to convert ’QString 1’ to ’unsigned char’ (solved)

Scheduled Pinned Locked Moved General and Desktop
12 Posts 4 Posters 9.2k Views
  • 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.
  • H Offline
    H Offline
    houmingc
    wrote on 8 Jan 2015, 07:08 last edited by
    #1

    i thought using toLocal8bit can convert from QString to unsigned char but i am wrong.

    error: cannot convert 'QString' to 'unsigned char' in assignment

    @

    Brightness0[6] = value.toLatin1();
    'QByteArray::operator QNoImplicitBoolCast() const' is private

    Brightness0[6] = value.data();
    Invalid conversion from 'QChar*' to 'unsigned char'

    Brightness0[6] = value.toLocal8bit().data();
    Invalid conversion from 'QChar*' to 'unsigned char'

    Brightness0[6] = (unsigned char *)(value);
    Invalid cast from type 'QString' to type 'unsigned char'

    @
    @
    void MainWindow::SendBrightness()
    {
    //total 8 bytes,first 6 bytes fixed,7 bytes-value,8 bytes-CRC
    unsigned char Brightness0[]= {0x08,0x11,0x01,0x00,0x00,0x00,0x00,0x00};
    unsigned char Brightness1[]={0x04,0x12,0x83,'\0'};

            //append GUI value
            QString value=ui->BrightnessCombo->currentText();
            Brightness0[6] = (value);                         //!!!!!error
    
    
            //calculate CRC and appending
            char crc0 = ModBusCRC(Brightness0,sizeof(Brightness0));
            Brightness0[7]=(crc0);
    
            //send value out
            serial->write((char *)Brightness0);             
    

    }

    @

    1 Reply Last reply
    0
    • J Offline
      J Offline
      JKSH
      Moderators
      wrote on 8 Jan 2015, 07:53 last edited by
      #2

      Are you trying to assign the whole string, or just one character? (Remember that a string is an array of characters)

      Asked another way: Do you want to use "unsigned char" or "unsigned char *"?

      Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

      1 Reply Last reply
      0
      • H Offline
        H Offline
        houmingc
        wrote on 8 Jan 2015, 08:40 last edited by
        #3

        Trying to assigned one character
        Trying to replace Array[6] with QString value & Array[7] with char value.

        Initially, I tried append to variable Brightness0[] index6 & index7, but not successful.

        1 Reply Last reply
        0
        • J Offline
          J Offline
          JKSH
          Moderators
          wrote on 8 Jan 2015, 08:50 last edited by
          #4

          [quote author="houmingc" date="1420706407"]Trying to assigned one character[/quote]Think of a QString as an array of QChar.

          @
          Brightness[6] = value[6].toLatin1();
          @

          Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

          1 Reply Last reply
          0
          • H Offline
            H Offline
            houmingc
            wrote on 8 Jan 2015, 09:01 last edited by
            #5

            Value of ui->BrightnessCombo is from 0 to 100
            QString value=ui->BrightnessCombo->currentText();

            I need to convert QString to one QChar and insert into index 6, but this is not successful
            @
            Brightness[6] = value.toLatin1();
            @

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andre
              wrote on 8 Jan 2015, 09:31 last edited by
              #6

              If value is a string that represents a number, then you'll first want to convert the string to an actual number: use one of the functions that create an unsigned number for you, like toUShort or toUInt. Then, it's a simple cast to put that value into a char (which is now used as a one-byte number, not as a character), which can then be assigned to your array.

              So, you end up with something like this:
              @
              bool ok;
              ushort sValue = value.toUShort(&ok);
              if (!ok) {
              //handle error
              }
              char cValue = static_cast<char>(sValue);

              Brightness[6] = cValue;
              @

              However, I think it would be simpler if you replace your combo box with something that actually returns a numeric value to begin with, like a QSpinBox and/or a QSlider.

              1 Reply Last reply
              0
              • H Offline
                H Offline
                houmingc
                wrote on 8 Jan 2015, 09:52 last edited by
                #7

                QString value=ui->BrightnessCombo->currentText();

                is change to

                QString value=ui->BrightnessCombo->currentindex();

                to solve the problem

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  andre
                  wrote on 8 Jan 2015, 09:56 last edited by
                  #8

                  [quote author="houmingc" date="1420710723"]QString value=ui->BrightnessCombo->currentText();

                  is change to

                  QString value=ui->BrightnessCombo->currentindex();

                  to solve the problem[/quote]
                  That's just wrong too. The last variant returns an integer, and then you put it into a string again. Why?

                  1 Reply Last reply
                  0
                  • H Offline
                    H Offline
                    houmingc
                    wrote on 8 Jan 2015, 15:13 last edited by
                    #9

                    i need to put it into a unsigned char array bit 6; my code is in the first post :>

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andre
                      wrote on 8 Jan 2015, 15:15 last edited by
                      #10

                      But... A char is a number, not a string. Why convert a number to a string, and then jump through hoops to get a number again?

                      1 Reply Last reply
                      0
                      • H Offline
                        H Offline
                        houmingc
                        wrote on 8 Jan 2015, 15:45 last edited by
                        #11

                        Need to add hex value in an array[] and minus the total with 0x100.
                        Below is the code i scribbled.
                        Is there an easier way to parse it. Hope to get some feedback before bedtime.

                        @
                        unsigned char Brightness0[]= {0x08,0x11,0x01,0x00,0x00,0x00,0x00,0x64};
                        unsigned char EndHexValue =0x100;

                           //convert Hex value to int
                           int EndIntValue=EndHexValue.toUInt(0,16);
                           //Array below is integer Equal of Brightness0
                           int EqualArray[];
                           //IntSum to contain total value of integer  
                           int IntSum=0;
                           unsigned char HexSum=0;
                           for (int a=0; a<sizeof(Brightness0); a++)
                          {     
                                 //Convert hex to int and set it into Integer array              
                                 Equalarray[a]= Brightness0[a].toUInt(0,16); 
                                 //Integer total value
                                 IntSum += EqualArray[a];
                        
                         }
                        
                                //Integer total value
                        
                                EndIntValue -= intSum; 
                        
                                HexSum=HexSum.Num(EndIntValue,16);
                        

                        @

                        Edit: merged with your previous thread on the same issue. Please don't start multiple threads on the same problem. Andre

                        1 Reply Last reply
                        0
                        • C Offline
                          C Offline
                          ckakman
                          wrote on 8 Jan 2015, 16:32 last edited by
                          #12

                          Hi,

                          You can replace the for loop with std::accumulate().

                          By the way I don't get why there are so many conversions there. The computer doesn't know number bases.

                          1 Reply Last reply
                          0

                          3/12

                          8 Jan 2015, 08:40

                          topic:navigator.unread, 9
                          • Login

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