Qt中int 、byte、Qbytearray、QString间的相互转化与网络数据传输

本文详细介绍了如何使用QHostAddress和QByteArray进行UDP数据发送,并解释了字节操作和16进制数转十进制的过程。讨论了网络传输中的大小端问题及在不同平台上的表现。

   QHostAddress serverip;
    serverip.setAddress(QString("192.168.0.7"));//这是人为指定ip地址的方法  

   QByteArray array;
    array.resize(2);
//    array[0]=0X00;
//    array[1]=0X04;
    bool ok;
    char byte1=QString("00").toInt(&ok,16);
    char byte2=QString("04").toInt(&ok,16);
    array[0]=byte1;
    array[1]=byte2;
    clientudp->writeDatagram(array,serverip,1111);//向1111端口写数据

上面是一段向udpsocket发送字节数组的代码,被注释掉的部分同样可用。char byte2=QString("04").toInt(&ok,16);表示将“04”按照16进制数解释为一个整型数(整型是一个数据类型,没有所谓的进制的区分,这里返回的整型默认用十进制表示),然后砍掉前24位赋值给一个char型。

另外网络中传输数据过程中(网线中)都是统一用的大端存储,但是数据发送前和接收后肯定字节序是保持一致的,不会颠倒,所以可以认为网络传输大小端方式是对程序猿透明的。(不过有时如果本地机器与此不符需要修正)。我在PC机与ARM上测试发现两者一致都是小端,无需修正

int hex=str.toInt(&ok,16);//将QString按照16进制数字来解释并返回十进制整型

QString(bytearray);//字节数组转换为QString

QByteArray::toHex(),fromHex;//不知道具体干嘛的

QByteArrayByte a=string.toAscii;//不知道具体干嘛的

欢迎高手指正
### 回答1: 您可以使用QString的静态函数`QString::number()`将QByteArray的长度换为字符串,然后将其插入到QString中。下面是一个示例代码: ```cpp QByteArray myArray("Hello, world!"); // 假设这是您要插入其长度的QByteArray QString myString = QString("The length of the byte array is %1.").arg(QString::number(myArray.length())); ``` 在这个示例中,我们使用`QString::arg()`函数将字符串格式化,将QString::number()函数的结果插入到字符串中。 结果将是一个QString,内容如下: ``` The length of the byte array is 13. ``` 您可以将`myString`打印出来或在界面上显示它。 ### 回答2: 在Qt中,如果要将QByteArray的长度插入QString中,可以使用QString的静态函数arg()来格式化字符串。 以下是如何将QByteArray的长度插入QString中的示例代码: ```cpp QByteArray byteArray("This is a QByteArray"); QString str = QString("QByteArray的长度是%1").arg(byteArray.length()); // str的值为 "QByteArray的长度是20" ``` 在上面的代码中,首先创建了一个QByteArray变量byteArray,然后使用arg()函数将byteArray的长度插入到QString中。在arg()函数中,%1表示要插入的对象的位置,其中1表示第一个要插入的对象,即byteArray.length();然后使用"QByteArray的长度是%1"作为格式化字符串,将byteArray.length()插入到字符串中,得到最终的QString对象str。 通过这种方式,我们可以方便地将QByteArray的长度插入到任意需要的地方,以满足自己的需求。 ### 回答3: 在Qt中,可以通过QString的静态成员函数number()来实现将QByteArray的长度插入QString中。这个函数的原型如下: QString QString::number(int n, int base = 10) 其中,n代表要换的数字值,base代表进制,这里我们使用默认的十进制。 要把QByteArray的长度插入QString中,可以如下操作: 1. 定义一个QByteArray对象,例如:QByteArray byteArray("Hello World"); 2. 调用QString的静态成员函数number(),传入byteArray.size()作为参数,将其换为QString型:QString length = QString::number(byteArray.size()); 3. 可以将得到的length字符串其他字符串拼接输出,例如:qDebug() << "QByteArray的长度是:" << length; 示例代码如下: #include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QByteArray byteArray("Hello World"); QString length = QString::number(byteArray.size()); qDebug() << "QByteArray的长度是:" << length; return a.exec(); } 通过以上步骤,即可将QByteArray的长度插入QString中,并输出结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值