c++ - How to use QDataStream::readBytes() -


according the documentation readbytes() (in qt 5.4's qdatastream), expect following code copy input_array newly allocated memory , point raw @ copy:

qbytearray input_array{"\x01\x02\x03\x04qwertyuiop"}; qdatastream unmarshaller{&input_array, qiodevice::readonly};  char* raw; uint length; unmarshaller.readbytes(raw, length);  qdebug() << "raw null? " << (raw == nullptr) << " ; length = " << length << endl; 

...but code prints raw null? true ; length = 0, indicating no bytes read input array.

why this? misunderstanding readbytes()?

the documentation not describe enough, qdatastream::readbytes expects data in format: quint32 part data length , data itself.

so read data using qdatastream::readbytes should first write using qdatastream::writebytes or write other way using proper format.

an example:

qbytearray raw_input = "\x01\x02\x03\x04qwertyuiop";  qbytearray ba;  qdatastream writer(&ba, qiodevice::writeonly); writer.writebytes(raw_input.constdata(), raw_input.length());  qdatastream reader(ba);  char* raw; uint length; reader.readbytes(raw, length);  qdebug() << "raw null? " << (raw == null) << " ; length = " << length << endl; 

also can use qdatastream::readrawdata , qdatastream::writerawdata read , write arbitrary data.


Comments

Popular posts from this blog

css - SVG using textPath a symbol not rendering in Firefox -

Java 8 + Maven Javadoc plugin: Error fetching URL -

order - Notification for user in user account opencart -