crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> QDataStream, как рабоать с QDataStream
void*
  опции профиля:
сообщение 28.7.2008, 19:44
Сообщение #11


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


так а QBuffer чем не подходит? его также можно использовать вместе с QDataStream и QTextStream
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 29.7.2008, 16:00
Сообщение #12


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


QBuffer штука возможно хорошая но в купе с QDataStream для обозначенных целей получается стрельба из пушки даже не по воробьям а по комарам :)

Вот классик который делает то что мне надо быстро и просто:

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;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.7.2008, 17:36
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(flankerr @ 29.7.2008, 20:00) *
но в купе с QDataStream

Цитата(flankerr @ 28.7.2008, 16:37) *
т.е. мне нужен некий буффер в конец которого я записываю произвольнео число байт

а при чем тут QDataStream?

тебе в сетаки что надо?
если буфер, то вот он QBuffer - готовый, не надо изобретать велосипед.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 30.7.2008, 11:33
Сообщение #14


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Фактически мне нужна очередь
То что мне надо я уже реализовал сам и выложи распечтаку кода - просто и быстро.
QBuffer использует seek т.е. он читает с указанного места и НЕ удаляет после прочтения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.7.2020, 7:37