精华内容
下载资源
问答
  • 在使用Qt编写界面,经常用到串口及TCP/UDP通讯,收发数据指令使用QByteArray类型的变量,读取数据时,会将读取到的数据保存到QByteArray类型的变量中:比如使用串口接收数据: QByteArray buffer = serialPort_motor...

    在使用Qt编写界面,经常用到串口及TCP/UDP通讯,收发数据指令使用QByteArray类型的变量,读取数据时,会将读取到的数据保存到QByteArray类型的变量中,比如使用串口接收数据:

    QByteArray buffer = serialPort->readAll();
    

    在接收到数据后会判断头字节以及校验和是否正确,比如,进行如下判断:

    if(buffer.at(0) == 0x68) && (buffer.at(1) == 0xff) && (buffer.at(2) == 0xff)
    

    程序运行起来后,无法对内容进行正确判断,之后经过不断测试,发现对于大于0x80(0x80 ~ 0xff)的数据都无法进行判断,小于0x80(0x00 ~ 0x7f)的数据可以进行判断。所以可以确定无法正确判断的原因是QByteArray数据类型通常不能直接和普通的无符号数字进行比较,所以在QByteArray变量之前加入了显示类型转换:

    if (((unsigned char)buffer.at(0) == 0x68) && ((unsigned char)buffer.at(1) == 0xff) && ((unsigned char)buffer.at(2) == 0xff))
    {
    	QMessageBox::about(NULL, "提示", "初始化完成!");
    }
    

    运行后,程序可以正确地进行判断。

    ·····················································
    ·····················································
    ·····················································
    例子:

    输入69 31 35 30 39 30 30 38 30 03 65 f7 5f,接受到数据后判断头字节是否是0x69以及校验和是否正确,并将f7显示在文本框。

    QByteArray buffer = SerialPort3->readAll();
    
    int buf_he = 0;
    if (buffer.at(0) == 0x69)//判断头字节
    {
    	for (int h = 0; h < 12; h++)
    	{
    		buf_he = buf_he + (unsigned char)buffer.at(h);  //必须使用(unsigned char)转换,否则无法判断(QByteArray内部存的数据是有符号的)
    	}
    	buf_he = buf_he & 0xff;
    	if (buf_he == (unsigned char)buffer.at(12))//校验和,必须使用(unsigned char)转换
    	{
    		//输出
    		QString str = (unsigned char)buffer.at(11);//必须使用(unsigned char)转换否则输出的字符串不正确,只能到0x3f。
    		ui.testBrowser->setText(str.toLatin1().toHex());//显示
    	//	ui.testBrowser->setText(buffer.mid(11,1).toHex());//与上面显示的结果一致
    	}
    }
    

    判断QByteArray字节数组某一字节的bit位

    		QByteArray arr;
    		arr.resize(udpSocket->pendingDatagramSize());
    	
    		QHostAddress cliaddr;//对方地址
    		quint16 port;//对方端口	
    		qint64 len = udpSocket->readDatagram(arr.data(), arr.size(), &cliaddr, &port);
    		
    		char status = (unsigned char)arr.at(5);
    		if (((status & 0xc0) >> 6) == 0x01)//判断第五字节(arr[5])的bit6~bit7是01 02 还是03
    		{
    			ui.sensitivityTextBrowser->setText("慢");
    		}
    		if (((status & 0xc0) >> 6) == 0x02)
    		{
    			ui.sensitivityTextBrowser->setText("中");
    		}
    		if (((status & 0xc0) >> 6) == 0x03)
    		{
    			ui.sensitivityTextBrowser->setText("快");
    		}
    

    将arr字节数组的第六至第九字节的数据转为浮点数(高位在前,低位在后)

    		int c = ((unsigned char)arr[9] << 24) | ((unsigned char)arr[8] << 16) | ((unsigned char)arr[7] << 8) | (unsigned char)arr[6]; //(高低位转换)
    		float d = *(float*)&c;
    		QString radiation = QString("%1").arg(d);
    		qDebug() << radiation;
    		ui.positionAngleTextBrowser->setText(radiation);
    

    接受数据02 30 31 31 52 30 30 00 00 34 2c 30 30 32 38,将最后四位数据转为十进制:比如后四位:30 30 32 3,8,转为十六进制:0028,转为十进制40

    if (((unsigned char)buffer.at(5) == 0x30) && ((unsigned char)buffer.at(6) == 0x30) && ((unsigned char)buffer.at(10) == 0x2c))
    	{
    		QString temp = buffer.mid(11,4);
    		QByteArray temp_hex = temp.toLatin1();//转为0028
    		qlonglong temp_int = temp_hex.toInt(nullptr, 16);//转为40
    
    	qDebug() << temp_int;
    
    	ui.currentTempLineEdit->setText(QString("%1").arg(temp_int));
    }
    
    展开全文
  • 有一个范围为0~0xffff的不确定的整型数要存入Qbytearray类型数组的第2,3个元素中 array[2]是低字节,array[3]是高字节,问:怎么能简单快速存入
  • 使用Qt mingw编译器,在日常编程及项目中,用到串口及TCP通讯时,经常会将读取到的数据保存到QByteArray类型的变量中,如: QByteArray data= tcpSocket->readAll(); 下一步通常会对读取到的数据内容进行判断,这时...

    使用Qt mingw编译器,在日常编程及项目中,用到串口及TCP通讯时,经常会将读取到的数据保存到QByteArray类型的变量中,如:

    QByteArray data= tcpSocket->readAll();

    下一步通常会对读取到的数据内容进行判断,这时就会出现一些问题。


    以下这种写法程序可以正常运行

     if((data[7]==0x03) && (data[8]==0xc0))

    但会提示警告:

    warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
              if((data[7]==0x03) && (data[8]==0xc0))


    于是在度娘上看到有人这么改:

    if((0x03==data[7]) && (0xc0==data[8]))

    如此编译器不再产生警告了,可程序运行起来,无法对内容进行正确判断,之前困扰了一段时间,我怀疑是QByteArray数据类型通常不能直接和普通的无符号数字进行比较,所以在QByteArray变量之前加入了显示类型转换:

    if((0x03==(unsigned char)data[7]) && (0xc0==(unsigned char)data[8]))
    如此编译器不再产生警告,程序可以正确地进行判断。

    一点点心得随笔记录也方便和真正有需要的人分享一下,希望能够帮助到和我一样细心的人,不喜欢的就当没看见好了,请口下留情,谢谢。




    展开全文
  • 将整形数据100转为4个字节表示的16进制 ,并存入QByteArray类型的数据中,按字节存入。 首先将整形数据转为8个字符的16进制: int num=100; QString hex = QString("%1").arg(num, 8, 16, QLatin1Char('0'));//字符...

    将整形数据100转为4个字节表示的16进制 ,并存入QByteArray类型的数据中,按字节存入。

    首先将整形数据转为8个字符的16进制:

    int num=100;
    QString hex = QString("%1").arg(num, 8, 16, QLatin1Char('0'));//字符串前面加0,转为8位16进制
    

    之后将字符串中的每两个字符作为一个字节,并存入QByteArray类型的数据中:

    QByteArray arr;
    arr[0] = hex.mid(0, 2).toInt(nullptr, 16);
    arr[1] = hex.mid(2, 2).toInt(nullptr, 16);
    arr[2] = hex.mid(4, 2).toInt(nullptr, 16);
    arr[3] = hex.mid(6, 2).toInt(nullptr, 16);
    

    可将arr的数据输出检验是否正确:

    qDebug()<<"arr.data()=" << arr.toHex();
    

    输出为:
    在这里插入图片描述

    展开全文
  • const QByteArray-->QString const QByteArray bytes; QString param = QString::fromAscii( bytes.data(), bytes.size() ); ----- const char* --> const QByteArray const char* data; const QByteArray buf; buf-

    const QByteArray-->QString 
    const QByteArray bytes; 
    QString param = QString::fromAscii( bytes.data(), bytes.size() ); 

    const char* --> const QByteArray 
    const char* data; 
    const QByteArray buf; 
    buf->append( data, sizeof(data) );


    展开全文
  • qt解析tcp通信传来的xml时,中文有乱码 ...QByteArray tmpQBA = m_pSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("GBK"); QString tmpQStr = tc->toUnicode(tmpQBA); //如下转换会导...
  • QString类型转换char* 、int、string、QByteArray 1. QString与char*相互转换 1) QString转char* A. QString先转换为QByteArray,然后由QByteArray转换为char* QString qstr; char cstr[20]; QByteArray bytes = ...
  • QByteArray类型转为十六进制字符串, 如 char *s ="0x23,0x7D...“格式 QString ByteArrayToHexString(QByteArray data){ QString ret(data.toHex().toUpper());//转为16进制大写 int len = ret.length()/...
  • 一、背景 Qt解析TCP/UDP通信传来的xml时,中文有乱码 ...QByteArray tmpQBA = m_pSocket-&gt;readAll(); QTextCodec *tc = QTextCodec::codecForName("GBK"); QString tmpQStr ...
  • QByteArray常用类型转换

    千次阅读 2019-05-16 14:51:19
    uchar转换为QByteArray类型方法: QByteArray sbuf = QByteArray::fromRawData((char *)buf, sizeof(buf)); QByteArray转换为uchar类型方法: 1.使用reinterpret_cast一次转换所有数据(responseData为QByteArra...
  • 在QML与C++的交互过程中,除了常用的不同属性转换,本文主要讲解QJsonArray、QJsonObject、QByteArray类型在QML中的使用,首先在cpp定义一个类注册到QML中,QML通过调用对应函数接口获取数据并显示 QJsonArray cpp...
  • QByteArray

    2021-04-26 19:47:38
    该类是一个用于处理字符串的类似于 C++的 string 类型的类 该类保证字符串以'\0'结尾,并使用隐式共享(copy-on-write)来减少内存用量和不必要的数据复制。 适合用于存储纯二进制数据和内存资源比较短缺的情况下。...
  • QString与QByteArray 各种类型互转

    千次阅读 2018-09-04 09:58:24
    QString 转QByteArray QString qstr = "waixingren"; QByteArray qbyteStr = qstr.toLatn1(); QByteArray转QString QByteArray qbyteStr = “waixingren”; QString qstr=""; qstr.append...
  • QT开发之QByteArray各种类型转换

    千次阅读 2019-10-29 18:20:57
    1.QByteArray与char*的转换 1.1 QByteArray 转 char* 方式1 传统方式data()和size()函数 (方便) QByteArray array(10, 'Q');//初始化 // 转化 char *buf;//只是一个指针 int len;//buf的长度 buf = array.data(); ...
  • Qt中的QByteArray

    2020-04-20 16:15:06
    1 QByteArray类概述 QByteArray类指字节数组,用QByteArray比const char *这种类型要便利的多...使用QByteArray类我们能够很方便的对数据包进行操作,可以先把数据包转换成QByteArray类型,对QByteArray可以较为方...
  • 文章详细收集了 string char* char[] QString QByteArray类型转换 所用内容亲测可用
  • QByteArray详解

    万次阅读 多人点赞 2018-06-05 09:00:41
    QByteArray在串口通讯中经常被使用,对于传输和显示数据非常实用。尤其是数据类型转换与显示时,非常方便处理,比如显示二进制或十六进制等。
  • 注意在把某种格式的数据append到QByteArray类型的前面或后面之前,一定要注意取完地址再进行指针类型转换。
  • QByteArray cstr("abcd"); QString s = cstr; QByteArray cstr("abcd"); QString s; s.prepend(cstr); QString s("hello"); QByteArray cstr = s.toAscii(); QString s("hello"); QByteArray cstr = s.toLatin1();
  • 数据类型转换之 QByteArray转QPixmap

    千次阅读 2017-11-02 13:38:46
    QByteArray转QPixmap QByteArray bytes = reply->readAll(); QPixmap p; p.loadFromData(bytes); ui->label->setPixmap(p);
  • Pyqt5 QByteArray转化为str

    千次阅读 2018-03-29 08:43:47
    在python3 + PyQt5中,由于PyQt5移除了QString类,...假定我们有一个 qba变量,类型是QByteArray类型,需要转化为str类型,那么请执行以下语句:str1 = str(qba, encoding='utf-8')如果不太了解PyQt5中数据类型与Py...
  • 想写一个网络数据关键词检索程序,从文件读取关键词,保存成QList,每个词都是 QString类型,每个网络帧的数据部分,存成一个 QByteArray对象,然后用contains方法查找,但是contains要求参数为 QByteArray 类型,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 417
精华内容 166
关键字:

qbytearray类型