0

在此函数中,string作为参数传递(将大量数据作为字符串)...

SendBytes 方法是这样定义的

bool NetOutputBuffer_c::SendBytes ( const void * pBuf, int iLen )
{
        BYTE * pMy = (BYTE*)pBuf;

        while ( iLen>0 && !m_bError )
        {
                int iLeft = m_iBufferSize - ( m_pBufferPtr-m_pBuffer );
                if ( iLen<=iLeft )
                {
                        printf("iLen is %d\n",iLen);
                        memcpy ( m_pBufferPtr, pMy, iLen );
                        m_pBufferPtr += iLen;
                        break;
                }

                ResizeIf ( iLen );
        }
        return !m_bError;
}

bool NetOutputBuffer_c::SendCompressedString ( std::string sStr )
{
    std::cout << sStr << endl;
    const char *cStr = sStr.c_str();
    std::cout << cStr <<endl;

    int iLen = cStr ? strlen(cStr) : 0;
    SendInt ( iLen );
    return SendBytes ( cStr, iLen );
}

尝试打印 sStr 的值以检查它是否具有正确的数据。

然后转换std::stringconst char *

转换后,尝试打印 cStr 的值。但它(cStr)实际上包含实际数据的 5%(sStr)......

为了获得整个数据,我需要做什么?

有人可以在这方面指导我吗?

4

1 回答 1

4

strlen适用于 c 字符串。也就是说,以空结尾的字符串。它搜索一个'\0'字符,并将该字符的位置作为字符串的长度返回。您有压缩的二进制数据,而不是 c 字符串。它几乎可以肯定在字符串结尾之前包含一个 0。改为使用sStr.size()

SendInt ( sStr.size() );
return SendBytes ( sStr.c_str(), sStr.size() );
于 2014-08-21T06:46:21.437 回答