关于QT中Tcp服务器端接收数据并解析数据的问题解决办法

本文详细介绍了在QT中TCP服务器端如何接收和解析数据,特别是使用QByteArray处理原始字节,并讨论了两种数据提取方法。还探讨了大小端问题及其解决方案,帮助读者理解数据在不同平台上的存储差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于QT中Tcp服务器端接收数据并解析数据的问题解决办法

前提

对于数据传输问题,无非就是数据的类型转换问题,如果想要深刻认识数据传输,就必须知道数据在串行传输过程中或者在TCP传输过程中,都是以二进制位为基础来实现的(也就01010101),深刻了解了这个,后面的数据传输问题相对来说都很好理解了,TCP传输过程中,通过二进制数据传输,那么你接收过来的原始数据也是二进制(原谅我又强调了一遍),到后面你定义什么数据接收,那么这个二进制打印出来的表现形式就是你定义的变量类型(其实变量的本质也是一个存储空间的别名,里面存储的也是一系列二进制数据,所展示出来的只是定义的哪个种类)。接下来我就来介绍一下数据传输过程中所遇到的问题,第一个就是存储问题。

QByteArray

QByteArray类提供了一个字节数组。QByteArray可用于存储原始字节(包括’\0’)和传统的以’\0’结尾的8位字符串。使用QByteArray比使用const char *方便得多。在幕后,它总是确保数据后面跟着一个’\0’终止符,并使用隐式共享(即写即拷)来减少内存使用并避免不必要的数据复制。
如对方发送了9个16进制的字节数据,用QByteArray定义的变量存储的是原始数据。

 QByteArray array = TcpSocketList.at(i)->readAll();

这里的TcpSocketList.at(i)是用容器存储的数据,姑且在这里就当QTcpSocket类型的套接字,调试的结果如下图:
在这里插入图片描述

因为 QByteArray 是创建了一个字节数组,用来网络存储发送的9个字节,所以看到的是9个数组成员,第二列是字符形式,第三列是十进制形式,第四列是十六进制形式。
因为需要取出其中两个字节作为目标数据([3]和[4]),并且这两个字节需要组合到一起进行十六进制转十进制计算,这样取出数据就有两种方法(目前我想到的)。

第一种

一个字节一个字节取出来然后做十六进制计算:

  quint8 m =  array.at(3);
  quint8 k = array
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值