Qt里怎么處理二進制數據


Qt里有個專門的類QDataStream就是專門讀寫二進制數據的, 它與QByteArray搭配在網絡編程中有奇效.

來個栗子:

// write data
QByteArray data;
QDataStream wds(&data, QIODevice::WriteOnly);

char a(1); int b(2); float c(3); double d(4);
wds << a << b << c << d;

// read data
QDataStream rds(data);
char aa; int bb; float cc; double dd;
rds >> aa >> bb >> cc >> dd;

在讀寫字符串的時候, 要注意: QDataStream在寫字符串時, 是會自動加上字符串長度的.
再來個栗子:

QByteArray data;
QDataStream wds(&data, QIODevice::WriteOnly);
ds << "hello";

你猜data有多長? 10!
為啥呢. 因為hello再加上\0一共是6個字節, ds會自動先寫入字符串長度, 是一個int, 也就是4個字節, 所以加起來是10!

那怎么要怎樣只輸出hello, 而不讓Qt自動添加長度呢? 可以這樣:

QString msg = "hello";
for (int i=0; i<msg.length(); i++)
    ds << (unsigned char)msg.at(i).toAscii();

這樣的話, 就能保證data長度是5了.

總結一下:
如果想讓QDataStream不"自作聰明", 就要按照它頭文件里給它輸入數據.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM