• 5358阅读
  • 12回复

[提问]怎样通过QDataStream向串口发送一个int型数组 [复制链接]

上一主题 下一主题
离线jlh94
 

只看楼主 倒序阅读 楼主  发表于: 2016-03-24
串口通信中要向串口发送一个int 型的数组,先声明一个int型数组,int dataSend[49] ; ,里面存放49个16进制的数,若是用QIODevice::write( )函数发送,write的参数必须是QByteArray型的字符串,不能发送int型的数组,可以用QDataStream来发送int型的数组吗?
离线nigoole

只看该作者 1楼 发表于: 2016-03-24
用下面这个方法试试:
for (int i = 0; i < 49; i++) {
    dataSend[0] = rand() % 100 + 10;
}
serialport->write(dataSend);[/code]
有句话说得好:好好学习,天天向上。加油~~!有上船的朋友联系企鹅393320854
离线nigoole

只看该作者 2楼 发表于: 2016-03-24
dataSend 定义为QByteArray dataSend;
有句话说得好:好好学习,天天向上。加油~~!有上船的朋友联系企鹅393320854
离线jlh94

只看该作者 3楼 发表于: 2016-03-24
回 nigoole 的帖子
nigoole:用下面这个方法试试:
for (int i = 0; i < 49; i++) {
    dataSend[0] = rand() % 100 + 10;
}
serialport->write(dataSend);
....... (2016-03-24 17:19) 

dataSend[0] = rand() % 100 + 10; 这个语句。。。不太明白
离线jlh94

只看该作者 4楼 发表于: 2016-03-24
回 nigoole 的帖子
nigoole:dataSend 定义为QByteArray dataSend; (2016-03-24 17:20) 

可是QByteArray不是字节数组吗 ,不能存放int型的数啊
离线jlh94

只看该作者 5楼 发表于: 2016-03-24
求大神回复指点啊
离线yuyu414

只看该作者 6楼 发表于: 2016-03-25
int a = 0x1234;
QByteArray ba;
memcpy(ba.data(), &a, 4);

serialPort->write(ba);
离线jlh94

只看该作者 7楼 发表于: 2016-03-25
回 yuyu414 的帖子
yuyu414:int a = 0x1234;
QByteArray ba;
memcpy(ba.data(), &a, 4);
serialPort->write(ba); (2016-03-25 15:01) 

memcpy是什么函数啊
离线realfan

只看该作者 8楼 发表于: 2016-03-29
回 yuyu414 的帖子
yuyu414:int a = 0x1234;
QByteArray ba;
memcpy(ba.data(), &a, 4);
serialPort->write(ba); (2016-03-25 15:01) 

memcpy(ba.data(), &a, 4);会有问题
ba的空间有不够的风险,ba的size也无法确定。
这种要么将整数转成字符串,要么用QDataStream
离线realfan

只看该作者 9楼 发表于: 2016-03-29
用QDataStream可以的
QByteArray baOut;
    QBuffer bufferOut(&baOut);
    bufferOut.open(QIODevice::WriteOnly);
    QDataStream out(&bufferOut);
for(int i = 0; i < 49; ++i)
{
    out << dataSend;
}
bufferOut.close();


离线realfan

只看该作者 10楼 发表于: 2016-03-29
你这个用可以直接用QByteArray
QByteArray ba((char*)dataSend, sizeof(dataSend)); //注int dataSend[49]要在同一可见范围内,或者用sizeof(int)*49
离线yuyu414

只看该作者 11楼 发表于: 2016-06-13
回 realfan 的帖子
realfan:memcpy(ba.data(), &a, 4);会有问题
ba的空间有不够的风险,ba的size也无法确定。
这种要么将整数转成字符串,要么用QDataStream (2016-03-29 15:45) 

漏了一句
int a = 0x1234;
QByteArray ba;
ba.resize(4);
memcpy(ba.data(), &a, 4);

serialPort->write(ba);
离线yuyu414

只看该作者 12楼 发表于: 2016-06-13
回 jlh94 的帖子
jlh94:memcpy是什么函数啊 (2016-03-25 18:32) 

C/C++的标准函数,内存拷贝
快速回复
限100 字节
 
上一个 下一个