создание двухбайтной строки

173
19 декабря 2018, 03:10

Беру число из массива и перевожу в строку в связи с тем что работать надо с битами.

QString DD1_0 = QString::number(array[1],2);
QString DD1_1 = QString::number(array[2],2);
// проверяем на размер в 8 бит если не хватает с 8 битами добавляем не достающие
    if(DD1_0.size() != 8){
         DD1_0.resize(8);
        for(int f =0 ; f< 8-DD1_0.size();f++)
//            DD1_0 = '0'+DD1_0;
//            DD1_0.prepend("0");
              DD1_0.insert(0, "0");
    }
    if(DD1_1.size() != 8){
         DD1_1.resize(8);
        for(int f =0 ; f< 8-DD1_1.size();f++)
            DD1_1 = '0'+DD1_1;
    }
QStringRef DD1_0_ref =DD1_0.rightRef(8);  // отрезаем "\u0000" окончание вектора
 QStringRef DD1_1_ref =DD1_1.rightRef(8);  // отрезаем "\u0000" окончание вектора

хотелось бы получить

DD1_0 =  "1010110"
DD1_1 =  "10000000"
после инсерта 
DD1_0 =  "01010110"
DD1_1 =  "10000000"

ТО что сейчас получаю :

DD1_0 =  "1010110\u0000"
DD1_1 =  "10000000"
Answer 1
QString number_str = QString("%1").arg(734, 16, 2, QChar('0'));

734 - ваше число
16 - размер результирующей строки (как я понял из контекста это 2 байта или 16 бит)
2 - основание (2 - бинарная)
QChar('0') - символ-заполнитель результирующей строки

Результат:

0000001011011110

Док:
http://doc.qt.io/qt-5/qstring.html#arg

Answer 2

Пояснения : берем из массива число и через QString(вектор(хотя по сути интерфейс)) закладываем 16-ричное число в 2-ричную строку.

Потом проверяем на размер (ибо в 16-ричном числе 8 бит), но так как QString при переводе удаляет нулевые символы до первой единички то мы проверяем строку на размерность в восемь элементов если на не совпадает то выполняется if где в каждом проходе дополняется в начало строки по одному нулю.

QString DD1_0 = QString::number(array[1],2);
if(DD1_0.size() != 8){
     for(int f=0; f<8-DD1_0.size();f++)
        DD1_0= '0'+ DD1_0;
}
DD1_0 =  "01010110"

Ради @MBo дополню ответ :3

мне нужен был первый бит главного регистра я вытянул его текстом, математические операции я провожу все таки математическими действиями в общем вот два байта 7F(главный байт array[2], DD1_1 ) и FF (второй байт array[1], DD1_0)

      DD1_0 = DD1_1 + DD1_0;
      int znach = DD1_0.toInt(nullptr,2); // перегнал строку в инт
      qDebug() << "DD1_0 + DD1_1 :" << DD1_0;
      qDebug() << "znach : " << znach;
      uint16_t rezult = ((uint16_t)array[2]<<8)+(uint16_t)array[1]; // сдвинул на 8 бит и добавил второй байт :3
      qDebug() << "rezult: " << rezult;
       ---------------------------------------
       DD1_0 + DD1_1 : "0111111111111111"
       znach :  32767
       rezult:  32767
READ ALSO
java config объектов

java config объектов

У меня есть класс простого объекта, например man, с двумя полями name и ageИ мне нужно, чтоб при старте программы, считывался текстовый конфигурационный...

185
Error: Could not find or load main class intellij Idea

Error: Could not find or load main class intellij Idea

Программа выдает такую ошибку при запускеПрописал в командоре класспас

188
логика приложения используя JavaFX

логика приложения используя JavaFX

Объясните логику написания приложения используя JavaFXСуть у меня такая: есть три FXML файла mainWindows, Windows2 - которое открывается используя Button2,...

188
Есть ли аналог setDefaultCloseOperation()?

Есть ли аналог setDefaultCloseOperation()?

Мне нужно сделать:

164