как рабоать с QDataStream ?
предположим хочу хзатолкнуть в стрим некий буфер:
QDataStream stream;
char tmp[256];
int size = stream.writeRawData(tmp,255);
так вот значение size бредовое (очень большое)
где грабли ?
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file); // we will serialize the data into the file
out << "the answer is"; // serialize a string
out << (qint32)42; // serialize an integer
class CBuffer
{
private:
char* m_pBuffer;
unsigned int m_iBufferSize;
public:
CBuffer()
{
m_pBuffer = NULL;
m_iBufferSize = 0;
}
CBuffer(const CBuffer &buf)
{
Delete();
m_iBufferSize = buf.Size();
m_pBuffer = new char[m_iBufferSize];
}
~CBuffer()
{
Delete();
}
void Add(char*,unsigned int size);
bool Get(char*,unsigned int size);
void Delete();
const unsigned int Size() const;
};
inline void CBuffer::Delete()
{
if(m_pBuffer)
{
delete m_pBuffer;
m_pBuffer = NULL;
m_iBufferSize = 0;
}
}
inline const unsigned int CBuffer::Size() const
{
return m_iBufferSize;
}
inline void CBuffer::Add(char* pBuf,unsigned int size)
{
if(size)
{
char* pTmp = new char[m_iBufferSize + size];
if(m_iBufferSize && m_pBuffer)
{
memcpy(pTmp,m_pBuffer,m_iBufferSize);
delete m_pBuffer;
};
memcpy(pTmp + m_iBufferSize,pBuf,size);
m_pBuffer = pTmp;
m_iBufferSize += size;
};
}
inline bool CBuffer::Get(char* pBuf,unsigned int size)
{
bool res = false;
if(m_pBuffer && size)
{
if( m_iBufferSize < size)
{
size = m_iBufferSize;
};
res = true;
memcpy(pBuf,m_pBuffer,size);
m_iBufferSize -= size;
char* pTmp = NULL;
if(m_iBufferSize)
{
pTmp = new char[m_iBufferSize];
memcpy(pTmp,m_pBuffer+size,m_iBufferSize);
}
delete m_pBuffer;
m_pBuffer = pTmp;
};
return res;
}