我目前正在学习如何使用 libcurl 开发 HTTP 代理。在我成功获得 HTTP 响应后,我将它们写入一个字符串,然后再使用回调函数进行进一步处理。在进一步的处理函数中,我首先需要将这些字符串转换为 char*,这导致了丢失数据的问题,因为那些包含 png 和 gif 等图像数据的 HTTP 响应。而其余的 HTTP 响应包含纯文本数据,如 HTML 和 css 工作正常。
我的疑问和问题是为什么c_str()函数在转换过程中消除了那些不可读的数据,比如图像数据?有什么办法可以解决这个丢失数据的问题吗?
代码: char* sData_source_ ;
void Client::send(string msg)
{
sData_source_ = (char*)msg.c_str();
cout << "Your string is " << strlen(sData_source_)<<endl;
}
输出: 发送 HTTP 响应[608]: 自由度:9 HTTP/1.1 200 正常 日期:2012 年 8 月 29 日星期三 00:58:25 GMT 服务器:Apache/2.2.16 (Debian) 最后修改时间:2012 年 8 月 28 日星期二 18:34:36 GMT ETag:“13e4735-136-4c857b1b54700” 接受范围:字节 保持事件:超时=15,最大值=99 内容类型:图片/png 内容长度:310 连接:保持事件状态 �PNG
IHDR�o�|d�IT pHYs � �B�4�tEXtSoftwareMacromedia Fireworks MX��*$tEXtCreation Time12/06/04g�m�IDATx��1�E�u�r -��R)��]X֚��w��<Ѱ��1F���������� tX��!��Z��=:$TJ��{��3��CRgb:$v4v��Cb� ��(����B��!tH��L��[k��_wx8/:,@������ xQ�2]�|�IEND�B`� 你的字符串是 306
注意:你们可以从上面的输出中观察到,最初的 HTTP 响应总长度为 608 字节。但是用c_str()函数转换后变成了306。
谢谢并期待有人回复。 :D
最佳答案
看起来您正在尝试将二进制文件视为字符串。
一旦遇到\0
终止符,字符串就会结束。请考虑以下事项:
const char* foo = "abc\012345667";
int length = strlen(foo);
长度
是3
,因为原始字符串在3个字符后被终止。
关于c++ - 转换为 char* C++ 后丢失字符串数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12175587/