删除字节数组缓冲区之间的空字符(\x00):Qt
Remove null character (\x00) in between buffer of byte array : Qt
我正在使用 readAll()
method of QSerialPort
class 从虚拟 COM 端口读取数据。
我的硬件板收到两个响应。
1.致谢("10")
字符串
2.查询数据(";1395994881;1.0.0")
字符串数据
作为 QByteArray : 10\x00;1395994881;1.0.0
我想从 QByteArray
中删除 \x00
个角色。
每当我尝试对我的 QByteArray 执行任何操作时,我将在 QByteArray
的第一部分执行,即 ``10 。剩余部分被跳过,即 ;1395994881;1.0.0
.
如果有任何方法可以从 QByteArray
中删除此 \x00
字符,请指导我。
代码
QByteArray data = serial.readAll(); //("10\x00;1395994881;1.0.0");
试一试:
QList<QByteArray> list = data.split('\x00');
qDebug()<<list; // 10
试一试:
qDebug()<<data.remove(2, 1); //10
试一试:
qDebug()<<QString(data); //10
试一试:
qDebug()<<data.replace('\x00', ""); //10
试一试:
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.
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);
}
}
}
请帮我解决这个问题。
串口返回的QByteArray
是从原始数据创建的,不像字符串。为了处理完整的数组,您可以使用对包含的 NULL
字符具有鲁棒性的 STL 样式迭代器。有关 fromRawData
数组的更多信息,请仔细阅读文档中的 detailed description。
这是一个展示如何修复字符串的简单示例:
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 != '[=10=]') fixed[index++] = c.toLatin1();
iter++;
}
fixed[index] = '[=10=]';
qDebug() << fixed; // 10;1395994881;1.0.0
我正在使用 readAll()
method of QSerialPort
class 从虚拟 COM 端口读取数据。
我的硬件板收到两个响应。
1.致谢("10")
字符串
2.查询数据(";1395994881;1.0.0")
字符串数据
作为 QByteArray : 10\x00;1395994881;1.0.0
我想从 QByteArray
中删除 \x00
个角色。
每当我尝试对我的 QByteArray 执行任何操作时,我将在 QByteArray
的第一部分执行,即 ``10 。剩余部分被跳过,即 ;1395994881;1.0.0
.
如果有任何方法可以从 QByteArray
中删除此 \x00
字符,请指导我。
代码
QByteArray data = serial.readAll(); //("10\x00;1395994881;1.0.0");
试一试:
QList<QByteArray> list = data.split('\x00'); qDebug()<<list; // 10
试一试:
qDebug()<<data.remove(2, 1); //10
试一试:
qDebug()<<QString(data); //10
试一试:
qDebug()<<data.replace('\x00', ""); //10
试一试:
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.
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);
}
}
}
请帮我解决这个问题。
串口返回的QByteArray
是从原始数据创建的,不像字符串。为了处理完整的数组,您可以使用对包含的 NULL
字符具有鲁棒性的 STL 样式迭代器。有关 fromRawData
数组的更多信息,请仔细阅读文档中的 detailed description。
这是一个展示如何修复字符串的简单示例:
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 != '[=10=]') fixed[index++] = c.toLatin1();
iter++;
}
fixed[index] = '[=10=]';
qDebug() << fixed; // 10;1395994881;1.0.0