gpt4 book ai didi

c++ - 通过 Google Protobuf 发送二进制文件数据

转载 作者:行者123 更新时间:2023-11-30 03:27:37 25 4
gpt4 key购买 nike

我的 protobuf-message 似乎设置得很好,我在网络上正确传输的所有其他字段都没有被截断。我只有一个问题,当我读取图片或文件的二进制数据然后通过 google protobuf 将其作为字节数组类型发送时,另一方面它只包含数组的前 4 个元素。如果图片是 200kb,另一端显示为 1kb(基本上只包含标题或标识符)。这个问题有点复杂,所以我会尝试给出一个答案。对不起,如果我让这无法理解。我可能会以完全错误的方式解决这个问题。

  1. 下面的示例包含概念性工作,并且是在类里面编写的。它很可能包含小错误。代码在家编译,如果有错字请告诉我,我可以改正。

        FILE* file;
    FILE* ofile;
    file = fopen("red.png", "rb");
    fseek(file, 0, SEEK_END);
    long fSize = ftell(file);
    rewind(file);
    BYTE* ret = new BYTE[fSize];
    fread(ret, 1, fSize, file);
    fclose(file);

    char dataStream[1024] //yes it is large enough
    myPacket.set_file(ret);
    //set other fields here
    myPacket.SerializeToArray(dataStream,sizeof(dataStream));
    //send through sockets below, works for all but file field.

    当我回到我的主要工作计算机时,我可以包含更多内容,抱歉,我只是希望我可以在上课时让这些炖菜。如果这些信息还不够,请随时批评我,寻求建议也没关系。我也知道某些图像格式可以通过某些方式读取,但是我能够复制 png 并在本地通过二进制文件重写它,而不是通过 protobuf

感谢大家阅读我的伪书,我终于开始努力提升自己的知识了。

将快速键入的指针错误(&ret)编辑为(ret)。也应该 size of 是 sizeof(myPacket) 而不是。

最佳答案

你写了这个:

char dataStream[1024] //yes it is large enough

但是,如果要在其中存储 200,000 字节,1024 字节的缓冲区怎么可能足够大呢?

最好在堆上分配更大的缓冲区,例如:

std::vector<char> dataStream(500000);
myPacket.SerializeToArray(&dataStream[0], dataStream.size());

关于c++ - 通过 Google Protobuf 发送二进制文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47208434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com