• 7205阅读
  • 13回复

为什么用stream不能把数据存入QByteArray?? [复制链接]

上一主题 下一主题
离线pywepe
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-21
上代码

     QCoreApplication a(argc, argv);

    QByteArray buf;
    buf.append(QString("xxx"));
    QTextStream stream(&buf);
    //stream<<QString("abcd")<<QString("efg");
    QDataStream s(&buf,QIODevice::WriteOnly);
    s<<23<<43;
    cout<<buf.data()<<endl;


不管用stream还是s
cout输出都是空的
真的不知道为什么了

达人指点
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-21
想想 传统的C字符串 char * 是以什么结束的
离线pywepe
只看该作者 2楼 发表于: 2009-12-22
引用第1楼dbzhang800于2009-12-21 22:54发表的  :
想想 传统的C字符串 char * 是以什么结束的



\0

然后呢? 本人愚钝 请明示
离线dbzhang800

只看该作者 3楼 发表于: 2009-12-22
不妨把 buf 中的内容输出来看看
qDebug()<<buf.toHex();
离线pywepe
只看该作者 4楼 发表于: 2009-12-22
引用第3楼dbzhang800于2009-12-22 12:57发表的  :
不妨把 buf 中的内容输出来看看
qDebug()<<buf.toHex();



toHex可以输出往QByteArray写的数据

为什么返回的const char* 不能输出来呢?

它没有'\0'  ??
离线pywepe
只看该作者 5楼 发表于: 2009-12-22
引用第3楼dbzhang800于2009-12-22 12:57发表的  :
不妨把 buf 中的内容输出来看看
qDebug()<<buf.toHex();


我知道了

输出为

000000170000002b

就是 \0\0\0

const char* 就是\0开头 截断了

是个空串

还是有疑问

QByteArray::data()  要怎么用 它返回const char* 怎么才能用上?
离线dbzhang800

只看该作者 6楼 发表于: 2009-12-22
把 tohex的结果贴出来
离线pywepe
只看该作者 7楼 发表于: 2009-12-22
引用第6楼dbzhang800于2009-12-22 21:49发表的  :
把 tohex的结果贴出来



000000170000002b
离线dbzhang800

只看该作者 8楼 发表于: 2009-12-22
我想不通的是,你为什么想把它们 std::cout 出来呢?
离线318065268
只看该作者 9楼 发表于: 2009-12-23
使用cout打印本来就不是很好用,往往会打印不出来;
而且还使用了QTextStream,需要解码后再打印。输入的是两个数字,需要用两个变量接收一下,然后再打印这两个变量。

QDataStream s(&buf,QIODevice::WriteOnly);
    s<<23<<43;
    cout<<buf.data()<<endl;

需要打印的话可以int i,j;  s>>i>>j; qDebug()<<i<<j;
使用QTextStream或QDataStream会带来一些便利性,但是内部会修改你的数据,类似于编解码,所以我们一般只在编解码之前和编解码之后打印,一般不在编码后和解码前打印或使用,这时候的数据并非其原始状态。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线pywepe
只看该作者 10楼 发表于: 2009-12-23
引用第8楼dbzhang800于2009-12-22 22:21发表的  :
我想不通的是,你为什么想把它们 std::cout 出来呢?



qDebug() 也打不出来
离线pywepe
只看该作者 11楼 发表于: 2009-12-23
谁能给我一个完整的例子
就不用这样下去了
离线dbzhang800

只看该作者 12楼 发表于: 2009-12-23
引用第10楼pywepe于2009-12-23 16:49发表的  :
qDebug() 也打不出来


这个我知道,我不明白的是你连内容是不是“可打印字符”都不清楚,为什么要尝试输出它,而不是输出 toHex
离线dbzhang800

只看该作者 13楼 发表于: 2009-12-23
引用第11楼pywepe于2009-12-23 16:53发表的  :
谁能给我一个完整的例子
就不用这样下去了


到现在我都不太清楚你想问什么。

明明数据都存进去了,toHex的结果你也看到了,可是你却想调用 std::cout 或 qDebug 去输出 不可见字符或C的空串。
快速回复
限100 字节
 
上一个 下一个