正如您可能从标题中找到的那样,我在将QByteArray
转换为整数时遇到了问题。
QByteArray buffer = server->read(8192);
QByteArray q_size = buffer.mid(0, 2);
int size = q_size.toInt();
但是,size
为0. buffer
没有收到任何ASCII字符,如果它不是ASCII字符,我认为toInt()
函数不起作用。 int size
应该是37(0x25),但是 - 正如我所说的 - 它是0。
q_size
为0x2500
(或其他字节顺序 - 0x0025
)。
这里有什么问题?我很确定q_size
拥有我需要的数据。
答案 0 :(得分:21)
这样的事情应该有效,使用数据流从缓冲区读取:
QDataStream ds(buffer);
short size; // Since the size you're trying to read appears to be 2 bytes
ds >> size;
// You can continue reading more data from the stream here
答案 1 :(得分:9)
如果QByteArray
包含带数字的字符串,toInt
方法将解析int。您希望将原始位解释为整数。我不认为在QByteArray
中有一种方法,所以你必须自己从单个字节构造值。可能这样的事情会起作用:
int size = (static_cast<unsigned int>(q_size[0]) & 0xFF) << 8
+ (static_cast<unsigned int>(q_size[1]) & 0xFF);
(或者相反,取决于Endianness)
答案 2 :(得分:8)
我自己没有尝试过这个问题,看看它是否有效,但它从Qt文档看起来就像你想要一个QDataStream一样。这支持提取所有基本的C ++类型,并且可以使用QByteArray作为输入创建。
答案 3 :(得分:1)
bool ok;
q_size.toHex().toInt(&ok, 16);
适合我
答案 4 :(得分:1)
我在将串行数据(QByteArray)
转换为整数时遇到了很大问题,整数用作Progress Bar
的值,但是以一种非常简单的方式解决了它:
QByteArray data = serial->readall();
QString data2 = tr(data); //converted the byte array to a string
ui->QProgressBar->setValue(data2.toUInt()); //converted the string to an unmarked integer..
答案 5 :(得分:0)
这对我有用:
QByteArray array2;
array2.reserve(4);
array2[0] = data[1];
array2[1] = data[2];
array2[2] = data[3];
array2[3] = data[4];
memcpy(&blockSize, array2, sizeof(int));
data
是qbytearray,从index = 1到4是数组整数。
答案 6 :(得分:0)
创建一个在QByteArray上运行的QDataStream。文档为here
答案 7 :(得分:0)
尝试使用QByteArray类的toInt(bool *ok = Q_NULLPTR, int base = 10) const
方法。
Android-java- How to sort a list of objects by a certain value within the object