Нажав QChar в QString

#include <QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication a (argc, argv);

unsigned char VEL_LEFT = 0;
VEL_LEFT  = VEL_LEFT | 100;

QString packet;
packet.push_back (QChar (VEL_LEFT));

qDebug () << "VEL_LEFT: " << VEL_LEFT;
qDebug () << "packet: " << packet;

return a.exec();
}

Намерение здесь состоит в том, чтобы манипулировать 8 битами путем ORing или ANDing их, а затем сохранять их в строке.

Тогда я хотел бы прочитать вывод как десятичный.

Выход этой программы:

VAL_LEFT: 100
packet: "d"

Что такое «д» здесь?

1

Решение

100 — это способ, которым ваша машина кодирует символ d в нижнем регистре. Так

char x = 'd';

такой же как

char x = 100;

Вы можете путать числа с представлениями. Сто это число. Он может быть представлен в виде строки «100», или сотней машин, или предложением, например «один более девяноста девяти». число однако представлен.

«100» — это представление. В базе 10 это число сто. Но в других системах представления он может представлять другие числа.

Ты заставил строку хранить номер сто. Затем вы распечатали его, используя символьное представление вашей системы. Ну, ваша система использует число на сотне, чтобы представить символ «d».

Что вы хотите, чтобы ваша строка хранить? Число сто? Символы «1», «0», «0»? Или что?

3

Другие решения

Похоже, вы хотите
packet.push_back (QString::number(VEL_LEFT));

вместо
packet.push_back (QChar (VEL_LEFT));

QString::number берет число и возвращает строку с представлением этого числа.
Например если VEL_LEFT равно 100, QString::number вернет строку «100».

3

Я хочу сначала манипулировать 8 битами, ORing или ANDing их. Затем я хочу сохранить их в QString, а затем я хотел бы прочитать вывод как «десятичный».

Следующие работы.

#include <QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
QCoreApplication a (argc, argv);

unsigned char SOP         = 0;
unsigned char E_STOP      = 0;
unsigned char DIRECTION   = 0;
unsigned char VEL_LEFT    = 0;

QString packet;

packet.append (SOP);

E_STOP    = E_STOP | 1;
packet.append (E_STOP);

DIRECTION = DIRECTION | 3;
packet.append (DIRECTION);

VEL_LEFT  = VEL_LEFT | 100;
packet.push_back (VEL_LEFT);

qDebug () << "VEL_LEFT: " << VEL_LEFT;

qDebug () << "packet0: " << (int)packet[0].toLatin1();
qDebug () << "packet1: " << (int)packet[1].toLatin1();
qDebug () << "packet2: " << (int)packet[2].toLatin1();
qDebug () << "packet3: " << (int)packet[3].toLatin1();

qDebug () << "packet: " << packet.length();

return a.exec();
}
0

что вы, вероятно, хотели это?

unsigned char tmpString[4];
*(uint32_t *)tmpString = 3158065;

«100» — это (как если бы вы набрали его на клавиатуре) «1» (ascii 49), за которым следуют два «0» (ascii 48) и 0, чтобы определить конец строки.

0
По вопросам рекламы [email protected]