В этой функции, проходя 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::string
в const char *
После преобразования попытался распечатать значение cStr. Но он (cStr) на самом деле содержит 5% фактических данных (sStr) …
что мне нужно сделать, чтобы получить все данные?
Может ли кто-нибудь направить меня в этом отношении?
strlen
работает для с-струн. То есть строки с нулевым символом в конце. Он ищет '\0'
символа и возвращает позицию этого символа в качестве длины строки. Вы сжали двоичные данные, а не к-строку. Он почти наверняка содержит 0 до конца строки. использование sStr.size()
вместо.
SendInt ( sStr.size() );
return SendBytes ( sStr.c_str(), sStr.size() );