Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从nghttp2(粘贴在下面)中的asio_common.cc为字节数组(uint8_t)修改字符串_生成器_C++_Arrays_C++17_Nghttp2 - Fatal编程技术网

C++ 如何从nghttp2(粘贴在下面)中的asio_common.cc为字节数组(uint8_t)修改字符串_生成器

C++ 如何从nghttp2(粘贴在下面)中的asio_common.cc为字节数组(uint8_t)修改字符串_生成器,c++,arrays,c++17,nghttp2,C++,Arrays,C++17,Nghttp2,我正在使用nghttp2的高级API libnghttp2_asio,修改一个从字符串生成uint8_t请求/响应体的函数,以便它直接从uint8_t数组生成 首先是: 生成器\u cb字符串\u生成器(标准::字符串数据){ 自动strio=std::使_共享(std::移动(数据), data.size()); 返回[strio](uint8*buf、大小长度、uint32*data标志){ 自动&data=strio->first; 自动和左=strio->second; 自动n=标准::

我正在使用nghttp2的高级API libnghttp2_asio,修改一个从字符串生成uint8_t请求/响应体的函数,以便它直接从uint8_t数组生成

首先是:

生成器\u cb字符串\u生成器(标准::字符串数据){
自动strio=std::使_共享(std::移动(数据),
data.size());
返回[strio](uint8*buf、大小长度、uint32*data标志){
自动&data=strio->first;
自动和左=strio->second;
自动n=标准::最小值(透镜,左侧);
std::copy_n(data.c_str()+data.size()-左,n,buf);
左-=n;
如果(左==0){
*数据|标志|=NGHTTP2(数据)标志(EOF);
}
返回n;
};
}
现在,我们很高兴为您带来我们的功能演示(我的修改尝试如下所示):

我不明白的是,如果我发送一个基本参数,它是一个uint8数组,比如说
uint8\u t value[]
,带有一个简单的短c字符串(因为它无论如何都是无符号字符),以“\0”结尾,那么如果我将打印输出放在回调主体之前,它将在这个函数
字节生成器中正确打印。但是如果我将打印输出向下移动一行到回调的主体内部,我会得到这个十六进制字符字符串,它甚至不会转换回相应的ASCII。示例
const uint8_t body[]={'o','l','s','d','j','a','\0'}当使用
reinterpret\u cast
在服务器代码的
req.on_data
回调中打印时,它显示为类似
xe2\xcb\x9f
的内容。如果在进入回调函数体之前打印,我只能在
bytes\u生成器
函数的顶行上看到字符的常规打印。我的想法是:也许我在用
move
做一些异常错误的事情,而指针不能用字符串这样的对象来做,就像
asio\u common.cc
中的
string\u生成器
函数一样?但是没有移动的情况下做同样的结果,让我更加困惑。请告知

nghttp2::asio\u http2::generator\u cb bytes\u generator(const uint8\u t*数据,大小\u t sz){
std::cout秒;
自动n=标准::最小值(透镜,左侧);
标准::cout