現在,當我瞭解代碼的工作原理時,我想將其轉換爲C++。將代碼從Python轉換爲C++
原來的Python代碼:
def recv_all_until(s, crlf):
data = ""
while data[-len(crlf):] != crlf:
data += s.recv(1)
return data
這裏是我的嘗試:
std::string recv_all_until(int socket, std::string crlf)
{
std::string data = "";
char buffer[1];
memset(buffer, 0, 1);
while(data.substr(data.length()-2, data.length()) != crlf)
{
if ((recv(socket, buffer, 1, 0)) == 0)
{
if (errno != 0)
{
close(socket);
perror("recv");
exit(1);
}
}
data = data + std::string(buffer);
memset(buffer, 0, 1);
}
return data;
}
但它顯示:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
據我所知,這個問題是while
循環,因爲裏面首先數據字符串是空的。那麼如何改進它使它和Python一樣工作呢?謝謝。
僅供參考,Python字符串有這使得該方法'endswith'你的while循環意圖更清晰:'while data.endswith(crlf)'。考慮到這一點,[此SO回答](http://stackoverflow.com/a/2072890/4859885)爲您提供了一個非常優雅的解決方案。 –