#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"
Что такое «д» здесь?
100 — это способ, которым ваша машина кодирует символ d в нижнем регистре. Так
char x = 'd';
такой же как
char x = 100;
Вы можете путать числа с представлениями. Сто это число. Он может быть представлен в виде строки «100», или сотней машин, или предложением, например «один более девяноста девяти». число однако представлен.
«100» — это представление. В базе 10 это число сто. Но в других системах представления он может представлять другие числа.
Ты заставил строку хранить номер сто. Затем вы распечатали его, используя символьное представление вашей системы. Ну, ваша система использует число на сотне, чтобы представить символ «d».
Что вы хотите, чтобы ваша строка хранить? Число сто? Символы «1», «0», «0»? Или что?
Похоже, вы хотите
packet.push_back (QString::number(VEL_LEFT));
вместо
packet.push_back (QChar (VEL_LEFT));
QString::number
берет число и возвращает строку с представлением этого числа.
Например если VEL_LEFT
равно 100, QString::number
вернет строку «100».
Я хочу сначала манипулировать 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();
}
что вы, вероятно, хотели это?
unsigned char tmpString[4];
*(uint32_t *)tmpString = 3158065;
«100» — это (как если бы вы набрали его на клавиатуре) «1» (ascii 49), за которым следуют два «0» (ascii 48) и 0, чтобы определить конец строки.