C++ c++;libCurl:发送多个字节的Post回调函数
我使用Libcurl post回调从文件发送数据。该示例演示如何从回调函数以每次调用1字节的形式发送数据。 我更改了代码,以便将文件读入块中。这很好用 当前示例代码为:C++ c++;libCurl:发送多个字节的Post回调函数,c++,curl,callback,byte,libcurl,C++,Curl,Callback,Byte,Libcurl,我使用Libcurl post回调从文件发送数据。该示例演示如何从回调函数以每次调用1字节的形式发送数据。 我更改了代码,以便将文件读入块中。这很好用 当前示例代码为: if(sizeleft){ *( char *)ptr = readptr[0]; readptr++; sizeleft--; return 1; } 本例以1字节的形式发送数据。 但是,假设我必须发送多个字节,我尝试将readptr每次增加两个,将sizeleft减少两个,然后一次返回两个字节 它不是这
if(sizeleft){
*( char *)ptr = readptr[0];
readptr++;
sizeleft--;
return 1;
}
本例以1字节的形式发送数据。
但是,假设我必须发送多个字节,我尝试将readptr每次增加两个,将sizeleft减少两个
,然后一次返回两个字节
它不是这样工作的,数据被破坏了
如果有人能帮我,我将不胜感激。
谢谢你很难从你的问题中分辨出你到底在做什么,预期会发生什么以及实际发生了什么。然而,看起来你走对了方向 for CURLOPT_read函数声明
size*nitems
(在本例中也称为size*nmemb
)是可以写入buffer
的字节数上限,函数的返回值是您写入的实际字节数。返回零意味着您已经编写了希望编写的所有内容,并且您的回调函数将不再被调用
如果函数返回的值不等于实际写入缓冲区的字节数,则可能会发生损坏
附言:类似于:
// copy as many bytes as we can, up to either:
// * The number of bytes we have remaining.
// or
// * The space available in ptr.
size_t maxBytes = size * nmemb;
size_t numBytes = std::min (maxBytes, sizeleft);
memcpy (ptr, readptr, numBytes);
readptr += numBytes;
sizeleft -= numBytes;
return numBytes;
很难从你的问题中分辨出你到底在做什么,你预期会发生什么以及实际发生了什么。然而,看起来你走对了方向 for CURLOPT_read函数声明
size*nitems
(在本例中也称为size*nmemb
)是可以写入buffer
的字节数上限,函数的返回值是您写入的实际字节数。返回零意味着您已经编写了希望编写的所有内容,并且您的回调函数将不再被调用
如果函数返回的值不等于实际写入缓冲区的字节数,则可能会发生损坏
附言:类似于:
// copy as many bytes as we can, up to either:
// * The number of bytes we have remaining.
// or
// * The space available in ptr.
size_t maxBytes = size * nmemb;
size_t numBytes = std::min (maxBytes, sizeleft);
memcpy (ptr, readptr, numBytes);
readptr += numBytes;
sizeleft -= numBytes;
return numBytes;
我对std::max(maxBytes,sizeleft)感到困惑
std::max
将返回最大maxBytes或sizeleft。如果sizeleft被返回,这意味着它将崩溃?我想它应该是std::min
,所以min值总是大于maxbytes。如果sizeleft和maxbytes都相等,那么这也将包含为相等。是的,应该是std::min,我将编辑答案以反映这一点。谢谢你的现场!我对std::max(maxBytes,sizeleft)感到困惑std::max
将返回最大maxBytes或sizeleft。如果sizeleft被返回,这意味着它将崩溃?我想它应该是std::min
,所以min值总是大于maxbytes。如果sizeleft和maxbytes都相等,那么这也将包含为相等。是的,应该是std::min,我将编辑答案以反映这一点。谢谢你的现场!