Удалите нулевой символ (\ x00) между буфером байтового массива: Qt

я использую readAll() метод QSerialPort класс для чтения данных из виртуального COM-порта.

Я получаю два ответа от моей аппаратной платы.
1. Подтверждение ("10") строка
2. Запрос данных (";1395994881;1.0.0") строковые данные
как QByteArray : 10\x00;1395994881;1.0.0

я хочу удалить \x00 персонаж из моего QByteArray,

Всякий раз, когда я пытаюсь выполнить какую-либо операцию с моим QByteArray, я буду выполнять в первой части QByteArray и это « 10. Оставшаяся часть пропускается, то есть ;1395994881;1.0.0,

Пожалуйста, направьте меня, если есть какой-либо способ удалить это \x00 персонаж из QByteArray,

Код
QByteArray data = serial.readAll(); //("10\x00;1395994881;1.0.0");

  1. Проверять:
    QList<QByteArray> list = data.split('\x00');
    qDebug()<<list; // 10

  2. Проверять:
    qDebug()<<data.remove(2, 1); //10

  3. Проверять:
    qDebug()<<QString(data); //10

  4. Проверять:
    qDebug()<<data.replace('\x00', ""); //10

  5. Проверять:
    Used Loop to go byte by byte, but same result

Я хочу, чтобы приведенная строка представляла собой одну строку или разделенную, неважно. Но нужна полная строка что-то вроде 10;1395994881;1.0.0 или же 10 а также ;1395994881;1.0.0,

Я также упомянул ниже Stack Overflow вопросы.
1. QByteArray to QString
2. Remove null from string:Java
3. Code Project

РЕДАКТИРОВАТЬ

//Function to read data from serial port
void ComPortThread::readData()
{
if(m_isComPortOpen) {
//Receive data from serial port
m_serial->waitForReadyRead(500); //Wait 0.5 sec
QByteArray data = m_serial->readAll();
if(!data.isEmpty()) {
qDebug()<<"Data: "<<data;  //10\x00;1395994881;1.0.0
//TODO: Separate out two responce like "10" and ";1395994881;1.0.0"//Problem : Unable to split data into two parts.
emit readyToRead(data);
}
}
}

Пожалуйста помоги мне с этим.

-1

Решение

QByteArray возвращаемый последовательный порт создается из необработанных данных и не ведет себя как символьная строка. Для обработки полного массива вы можете использовать итератор в стиле STL, который является устойчивым к включенному NULL персонажи. Для получения дополнительной информации о fromRawData массивы, пожалуйста, внимательно прочитайте Подробное описание в документации.

Вот грязный пример, показывающий, как вы можете исправить вашу строку:

const char mydata[] = {
'1', '0', 0x00, ';', '1', '3', '9', '5', '9', '9', '4', '8', '8', '1', ';', '1', '.', '0', '.', '0'
};
QByteArray data = QByteArray::fromRawData(mydata, sizeof(mydata));
qDebug() << data; // "10\x00;1395994881;1.0.0"
char fixed[255];
int index = 0;
QByteArray::iterator iter = data.begin();
while(iter != data.end())
{
QChar c = *iter;
if (c != '\0') fixed[index++] = c.toLatin1();
iter++;
}
fixed[index] = '\0';

qDebug() << fixed; // 10;1395994881;1.0.0
1

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

Других решений пока нет …

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