问题:获取缓冲区数据

时间:2011-03-25 17:02:49

标签: c++

我正在尝试将我的缓冲区复制到另一个缓冲区但我无法获得实际值。

以下是我的计划流程: 1.创建随机整数 2.将其转换为char 3.将它们存放在STL容器中 4.从容器中检索第一个元素 5.将其转换为int形式

这是我的头文件:

struct BufferData
    {
        char *m_BufferData;
        int m_Size;
    };

private:
typedef std::vector<BufferData *>BufferVector;
    BufferVector m_RecvBuffer1, m_RecvBuffer2, m_RecvBuffer3;
    typedef std::vector<BufferData *>::iterator BufferVectorIterator;
    BufferVectorIterator IterBuffer1, IterBuffer2, IterBuffer3;

这是我的cpp文件:

仅考虑步骤#4和#5。

void CUdpSocket::GetEachBuffer(char *BufferSource1, char *BufferSource2, char *BufferSource3)
{
    if(!m_RecvBuffer1.empty())
    {
        IterBuffer1 = m_RecvBuffer1.begin();
        memcpy(BufferSource1, *IterBuffer1, BUFFER_SIZE);
        m_RecvBuffer1.erase(IterBuffer1);
    }
    else
        memcpy(BufferSource1, 0, BUFFER_SIZE);

    if(!m_RecvBuffer2.empty())
    {
        IterBuffer2 = m_RecvBuffer2.begin();
        memcpy(BufferSource2, *IterBuffer2, BUFFER_SIZE);
        m_RecvBuffer2.erase(IterBuffer2);
    }
    else
        memcpy(BufferSource2, 0, BUFFER_SIZE);

    if(!m_RecvBuffer3.empty())
    {
        IterBuffer3 = m_RecvBuffer3.begin();
        memcpy(BufferSource3, *IterBuffer3, BUFFER_SIZE);
        m_RecvBuffer3.erase(IterBuffer3);
    }
    else
        memcpy(BufferSource3, 0, BUFFER_SIZE);
}

这是我的输出:

m_RecvBuffer1   [1](0x0034feb8 {m_BufferData=0x0034bc28 "45" m_Size=4 })
BufferSource1   0x0034bca8 "(¼4"    char *

现在您可以看到我的BufferSource1变为(¼4。它应该以{{1​​}}形式显示45。我该如何解决?请帮忙。

谢谢。

1 个答案:

答案 0 :(得分:4)

改变这个:

memcpy(BufferSource1, *IterBuffer1, BUFFER_SIZE);

到此:

memcpy(BufferSource1, (*IterBuffer1)->m_BufferData, (*IterBuffer1)->m_Size);

因为 m_RecvBuffer1 的类型是std::vector<BufferData*>,而不是std::vector<char*>

为其他人做同样的改变!