在 QString 中推送 QChar
Pushing a QChar in 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();
}
这里的目的是通过ORing或ANDing来操作8位,然后将它们存储在一个字符串中。
然后我想将输出读取为十进制。
这个程序的输出是:
VAL_LEFT: 100
packet: "d"
这里的"d"是什么?
100 是您的机器编码小写 d 字符的方式。所以
char x = 'd';
与
相同
char x = 100;
您可能将数字与表示混淆了。一百是一个数字。它可以表示为字符串“100”或一百辆汽车或类似“多于 ninety-nine”的句子。它与 数字 相同,但表示方式相同。
“100”是一个代表。在基数 10 中,它代表数字一百。但在其他表示系统中,它可以表示其他数字。
你让字符串存储了数字一百。然后使用系统的字符表示打印它。那么,您的系统使用百位上的数字来表示字符 "d"。
您希望您的字符串存储什么?一百这个数字?字符“1”、“0”、“0”?或者什么?
看起来你想要
packet.push_back (QString::number(VEL_LEFT));
而不是
packet.push_back (QChar (VEL_LEFT));
QString::number
取一个数字,return 是一个表示该数字的字符串。
例如如果 VEL_LEFT
等于 100,QString::number
将 return 字符串“100”。
我想首先通过 ORing 或 ANDing 操作 8 位。然后我想将它们存储在 QString 中,然后我想将输出读取为 "decimal".
以下作品。
#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。
#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();
}
这里的目的是通过ORing或ANDing来操作8位,然后将它们存储在一个字符串中。
然后我想将输出读取为十进制。
这个程序的输出是:
VAL_LEFT: 100
packet: "d"
这里的"d"是什么?
100 是您的机器编码小写 d 字符的方式。所以
char x = 'd';
与
相同char x = 100;
您可能将数字与表示混淆了。一百是一个数字。它可以表示为字符串“100”或一百辆汽车或类似“多于 ninety-nine”的句子。它与 数字 相同,但表示方式相同。
“100”是一个代表。在基数 10 中,它代表数字一百。但在其他表示系统中,它可以表示其他数字。
你让字符串存储了数字一百。然后使用系统的字符表示打印它。那么,您的系统使用百位上的数字来表示字符 "d"。
您希望您的字符串存储什么?一百这个数字?字符“1”、“0”、“0”?或者什么?
看起来你想要
packet.push_back (QString::number(VEL_LEFT));
而不是
packet.push_back (QChar (VEL_LEFT));
QString::number
取一个数字,return 是一个表示该数字的字符串。
例如如果 VEL_LEFT
等于 100,QString::number
将 return 字符串“100”。
我想首先通过 ORing 或 ANDing 操作 8 位。然后我想将它们存储在 QString 中,然后我想将输出读取为 "decimal".
以下作品。
#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。