QByteArray в целое число
как вы, возможно, поняли из названия, у меня возникли проблемы с преобразованием QByteArray
в целое число.
QByteArray buffer = server->read(8192);
QByteArray q_size = buffer.mid(0, 2);
int size = q_size.toInt();
однако, size
равен 0. The buffer
не получает никакого символа ASCII, и я считаю, что toInt()
функция не будет работать, если это не символ ASCII. The int size
должно быть 37 (0x25), но - как я уже сказал - это 0.
на q_size
is 0x2500
(или другой порядок endianness -0x0025
).
в чем проблема? Я уверена q_size
содержит данные, которые мне нужны.
8 ответов
Я не пробовал это сам, чтобы увидеть, работает ли это, но из документов Qt похоже, что вы хотите QDataStream. Это поддерживает извлечение всех основных типов C++ и может быть создано с QByteArray в качестве входных данных.
что-то вроде этого должно работать, используя поток данных для чтения из буфера:
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
на toInt
метод анализирует int, если QByteArray
содержит строку с цифрами. Вы хотите интерпретировать необработанные биты как целое число. Я не думаю, что есть метод для этого в QByteArray
, поэтому вам придется построить значение самостоятельно из одиночных байтов. Вероятно, что-то вроде этого сработает:
int size = (static_cast<unsigned int>(q_size[0]) & 0xFF) << 8
+ (static_cast<unsigned int>(q_size[1]) & 0xFF);
(или наоборот, в зависимости от Endianness)
у меня были большие проблемы с преобразованием последовательных данных (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..
это работает для меня:
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-целое число массива.
создайте QDataStream, который работает на вашем QByteArray. Документация здесь
попробовать toInt(bool *ok = Q_NULLPTR, int base = 10) const
метод класса QByteArray.
QByteArray Documentatio: http://doc.qt.io/qt-5/QByteArray.html