⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdatastream.cpp

📁 doxygen(一个自动从源代码生成文档的工具)的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  Reads an unsigned 32-bit integer from the stream and returns a reference to  the stream.*//*!  Reads a signed 32-bit integer from the stream and returns a reference to  the stream.*/QDataStream &QDataStream::operator>>( Q_INT32 &i ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	i = read_int_ascii( this );    } else if ( noswap ) {			// no conversion needed	dev->readBlock( (char *)&i, sizeof(Q_INT32) );    } else {					// swap bytes	register uchar *p = (uchar *)(&i);	char b[4];	dev->readBlock( b, 4 );	*p++ = b[3];	*p++ = b[2];	*p++ = b[1];	*p   = b[0];    }    return *this;}/*!  \fn QDataStream &QDataStream::operator>>( Q_UINT64 &i )  Reads an unsigned 64-bit integer from the stream and returns a reference to  the stream, or uses the Q_UINT32 operator if 64 bit is not available.*//*!  Reads a signed 64-bit integer from the stream and returns a reference to  the stream, or uses the Q_UINT32 operator if 64 bit is not available.*/QDataStream &QDataStream::operator>>( Q_INT64 &i ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	i = read_int_ascii( this );    } else if ( noswap ) {			// no conversion needed	dev->readBlock( (char *)&i, sizeof(Q_INT64) );    } else {					// swap bytes	register uchar *p = (uchar *)(&i);	char b[sizeof(Q_INT64)];	dev->readBlock( b, sizeof(Q_INT64) );	if ( sizeof(Q_INT64) == 8 ) {	    *p++ = b[7];	    *p++ = b[6];	    *p++ = b[5];	    *p++ = b[4];	}	*p++ = b[3];	*p++ = b[2];	*p++ = b[1];	*p   = b[0];    }    return *this;}static double read_double_ascii( QDataStream *s ){    register int n = 0;    char buf[80];    while ( TRUE ) {	buf[n] = s->device()->getch();	if ( buf[n] == '\n' || n > 78 )		// $-terminator	    break;	n++;    }    buf[n] = '\0';    return atof( buf );}/*!  Reads a 32-bit floating point number from the stream using the standard  IEEE754 format. Returns a reference to the stream.*/QDataStream &QDataStream::operator>>( float &f ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	f = (float)read_double_ascii( this );    } else if ( noswap ) {			// no conversion needed	dev->readBlock( (char *)&f, sizeof(float) );    } else {					// swap bytes	register uchar *p = (uchar *)(&f);	char b[4];	dev->readBlock( b, 4 );	*p++ = b[3];	*p++ = b[2];	*p++ = b[1];	*p   = b[0];    }    return *this;}/*!  Reads a 64-bit floating point number from the stream using the standard  IEEE754 format. Returns a reference to the stream.*/QDataStream &QDataStream::operator>>( double &f ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	f = read_double_ascii( this );    } else if ( noswap ) {			// no conversion needed	dev->readBlock( (char *)&f, sizeof(double) );    } else {					// swap bytes	register uchar *p = (uchar *)(&f);	char b[8];	dev->readBlock( b, 8 );	*p++ = b[7];	*p++ = b[6];	*p++ = b[5];	*p++ = b[4];	*p++ = b[3];	*p++ = b[2];	*p++ = b[1];	*p   = b[0];    }    return *this;}/*!  Reads the '\0'-terminated string \a s from the stream and returns  a reference to the stream.  Space for the string is allocated using \c new - the caller must  eventually call delete[] on the value.*/QDataStream &QDataStream::operator>>( char *&s ){    uint len = 0;    return readBytes( s, len );}/*!  Reads the buffer \a s from the stream and returns a reference to the  stream.  The buffer \a s is allocated using \c new. Destroy it with the \c delete[]  operator.  If the length is zero or \a s cannot be allocated, \a s is  set to 0.  The \a l parameter will be set to the length of the buffer.  The serialization format is an Q_UINT32 length specifier first, then the  data (\a l bytes).  \sa readRawBytes(), writeBytes()*/QDataStream &QDataStream::readBytes( char *&s, uint &l ){    CHECK_STREAM_PRECOND    Q_UINT32 len;    *this >> len;				// first read length spec    l = (uint)len;    if ( len == 0 || eof() ) {	s = 0;	return *this;    } else {	s = new char[len];			// create char array	CHECK_PTR( s );	if ( !s )				// no memory	    return *this;	return readRawBytes( s, (uint)len );    }}/*!  Reads \a len bytes from the stream into \a s and returns a reference to  the stream.  The buffer \a s must be preallocated.  \sa readBytes(), QIODevice::readBlock(), writeRawBytes()*/QDataStream &QDataStream::readRawBytes( char *s, uint len ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	register Q_INT8 *p = (Q_INT8*)s;	while ( len-- )	    *this >> *p++;    } else {					// read data char array	dev->readBlock( s, len );    }    return *this;}/*****************************************************************************  QDataStream write functions *****************************************************************************//*!  \fn QDataStream &QDataStream::operator<<( Q_UINT8 i )  Writes an unsigned byte to the stream and returns a reference to  the stream.*//*!  Writes a signed byte to the stream.*/QDataStream &QDataStream::operator<<( Q_INT8 i ){    CHECK_STREAM_PRECOND    if ( printable && (i == '\\' || !isprint(i)) ) {	char buf[6];				// write octal code	buf[0] = '\\';	buf[1] = '0' + ((i >> 6) & 0x07);	buf[2] = '0' + ((i >> 3) & 0x07);	buf[3] = '0' + (i & 0x07);	buf[4] = '\0';	dev->writeBlock( buf, 4 );    } else {	dev->putch( i );    }    return *this;}/*!  \fn QDataStream &QDataStream::operator<<( Q_UINT16 i )  Writes an unsigned 16-bit integer to the stream and returns a reference  to the stream.*//*!  Writes a signed 16-bit integer to the stream and returns a reference to  the stream.*/QDataStream &QDataStream::operator<<( Q_INT16 i ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	char buf[16];	sprintf( buf, "%d\n", i );	dev->writeBlock( buf, strlen(buf) );    } else if ( noswap ) {			// no conversion needed	dev->writeBlock( (char *)&i, sizeof(Q_INT16) );    } else {					// swap bytes	register uchar *p = (uchar *)(&i);	char b[2];	b[1] = *p++;	b[0] = *p;	dev->writeBlock( b, 2 );    }    return *this;}/*!  \fn QDataStream &QDataStream::operator<<( Q_UINT32 i )  Writes an unsigned 32-bit integer to the stream and returns a reference to  the stream.*//*!  Writes a signed 32-bit integer to the stream and returns a reference to  the stream.*/QDataStream &QDataStream::operator<<( Q_INT32 i ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	char buf[16];	sprintf( buf, "%d\n", i );	dev->writeBlock( buf, strlen(buf) );    } else if ( noswap ) {			// no conversion needed	dev->writeBlock( (char *)&i, sizeof(Q_INT32) );    } else {					// swap bytes	register uchar *p = (uchar *)(&i);	char b[4];	b[3] = *p++;	b[2] = *p++;	b[1] = *p++;	b[0] = *p;	dev->writeBlock( b, 4 );    }    return *this;}/*!  \fn QDataStream &QDataStream::operator<<( Q_UINT64 i )  Writes an unsigned 64-bit integer to the stream and returns a reference to  the stream, or uses the Q_UINT32-operator if 64 bit is not available.*//*!  Writes a signed 64-bit integer to the stream and returns a reference to  the stream, or calls the Q_INT32-operator if 64 bit is not available.*/QDataStream &QDataStream::operator<<( Q_INT64 i ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	char buf[20];	sprintf( buf, "%ld\n", i );	dev->writeBlock( buf, strlen(buf) );    } else if ( noswap ) {			// no conversion needed	dev->writeBlock( (char *)&i, sizeof(Q_INT64) );    } else {					// swap bytes	register uchar *p = (uchar *)(&i);	char b[sizeof(Q_INT64)];	if ( sizeof(Q_INT64) == 8 ) {	    b[7] = *p++;	    b[6] = *p++;	    b[5] = *p++;	    b[4] = *p++;	}	b[3] = *p++;	b[2] = *p++;	b[1] = *p++;	b[0] = *p;	dev->writeBlock( b, sizeof(Q_INT64) );    }    return *this;}/*!  \fn QDataStream &QDataStream::operator<<( uint i )  Writes an unsigned integer to the stream as a 32-bit unsigned integer  (Q_UINT32).  Returns a reference to the stream.*//*!  \fn QDataStream &QDataStream::operator<<( int i )  Writes a signed integer to the stream as a 32-bit signed integer (Q_INT32).  Returns a reference to the stream.*//*!  Writes a 32-bit floating point number to the stream using the standard  IEEE754 format.  Returns a reference to the stream.*/QDataStream &QDataStream::operator<<( float f ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	char buf[32];	sprintf( buf, "%g\n", (double)f );	dev->writeBlock( buf, strlen(buf) );    } else {	float g = f;				// fixes float-on-stack problem	if ( noswap ) {				// no conversion needed	    dev->writeBlock( (char *)&g, sizeof(float) );	} else {				// swap bytes	    register uchar *p = (uchar *)(&g);	    char b[4];	    b[3] = *p++;	    b[2] = *p++;	    b[1] = *p++;	    b[0] = *p;	    dev->writeBlock( b, 4 );	}    }    return *this;}/*!  Writes a 64-bit floating point number to the stream using the standard  IEEE754 format.  Returns a reference to the stream.*/QDataStream &QDataStream::operator<<( double f ){    CHECK_STREAM_PRECOND    if ( printable ) {				// printable data	char buf[32];	sprintf( buf, "%g\n", f );	dev->writeBlock( buf, strlen(buf) );    } else if ( noswap ) {			// no conversion needed	dev->writeBlock( (char *)&f, sizeof(double) );    } else {					// swap bytes	register uchar *p = (uchar *)(&f);	char b[8];	b[7] = *p++;	b[6] = *p++;	b[5] = *p++;	b[4] = *p++;	b[3] = *p++;	b[2] = *p++;	b[1] = *p++;	b[0] = *p;	dev->writeBlock( b, 8 );    }    return *this;}/*!  Writes the '\0'-terminated string \a s to the stream and returns  a reference to the stream.  The string is serialized using writeBytes().*/QDataStream &QDataStream::operator<<( const char *s ){    if ( !s ) {	*this << (Q_UINT32)0;	return *this;    }    uint len = qstrlen( s ) + 1;			// also write null terminator    *this << (Q_UINT32)len;			// write length specifier    return writeRawBytes( s, len );}/*!  Writes the length specifier \a len and the buffer \a s to the stream and  returns a reference to the stream.  The \a len is serialized as an Q_UINT32, followed by \a len bytes from  \a s.  \sa writeRawBytes(), readBytes()*/QDataStream &QDataStream::writeBytes(const char *s, uint len){    CHECK_STREAM_PRECOND    *this << (Q_UINT32)len;			// write length specifier    if ( len )	writeRawBytes( s, len );    return *this;}/*!  Writes \a len bytes from \a s to the stream and returns a reference to the  stream.  \sa writeBytes(), QIODevice::writeBlock(), readRawBytes()*/QDataStream &QDataStream::writeRawBytes( const char *s, uint len ){    CHECK_STREAM_PRECOND    if ( printable ) {				// write printable	register char *p = (char *)s;	while ( len-- )	    *this << *p++;    } else {					// write data char array	dev->writeBlock( s, len );    }    return *this;}#endif // QT_NO_DATASTREAM

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -