• 6942阅读
  • 3回复

请教关于QByteArray和QDataStream问题 [复制链接]

上一主题 下一主题
离线liumingguang
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-24
QString iii="abc";
int num=iii.size();//num=3

QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_3);
QString iii="abc";
out<<iii;//或out<<iii.toAscii();
int num=block.size();//num=3+4。这里为什么会是7个字节?

假如我要把字符串"111111111111111"等价与
0x310x310x310x310x310x310x310x310x310x310x310x310x310x310x310x00
发送,如何实现?
本来想用
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_3);
QString iii="111111111111111";
out<<iii.toAscii();
out<<'\0';
实现,结果发现和
out << quint8(0x31)<<quint8(0x31)<<quint8(0x31)<<quint8(0x31)<<quint8(0x31)
<<quint8(0x31)<<quint8(0x31)<<quint8(0x31)<<quint8(0x31)<<quint8(0x31)
<<quint8(0x31)<<quint8(0x31)<<quint8(0x31)<<quint8(0x31)<<quint8(0x31);
out<<quint8('\0');//这种效果是我想要的。
有很大的差距,这是为什么?
离线wangxinus

只看该作者 1楼 发表于: 2009-10-25
不要使用 << 操作符,
使用 block.write(..)
http://www.wangxinus.com
自己刚刚开的博客,欢迎来访!征友链!

网心幽思 - WangXinus' Home
不积跬步,无以致千里;不积小流,无以成江海。
离线yj_yulin

只看该作者 2楼 发表于: 2009-10-26
你写到datastream里面的是qbytearray,本来就是这样的.
具体请参考:http://doc.qt.nokia.com/4.5/datastreamformat.html
QByteArray    
If the byte array is null: 0xFFFFFFFF (quint32)
Otherwise: the array size (quint32) followed by the array bytes, i.e. size bytes

可以使用下面的来达到你的要求
QDataStream & writeBytes ( const char * s, uint len )
int writeRawData ( const char * s, int len )
离线liumingguang
只看该作者 3楼 发表于: 2009-10-26
  感谢楼上两位的回答。
1楼说的不太行,因为我编写的TCP/IP程序,不可能一个一个发送,必须先打包再发。
2楼说的可行,呵呵,长了见识。


  
快速回复
限100 字节
 
上一个 下一个