gpt4 book ai didi

c - 如何获取网络缓冲区并将其传递到需要 C 中的 FILE 的函数中

转载 作者:行者123 更新时间:2023-11-30 16:02:18 24 4
gpt4 key购买 nike

我希望能够通过网络套接字从 HTTP 服务器(A jpeg)下载文件。然后我需要将下载的文件传递到 c-jpeg-steganography http://code.google.com/p/c-jpeg-steganography/ 。我可以使用 libcurl 下载文件,然后将文件名传递到库中,但如果不需要,我宁愿不这样做。我可以下载该文件,然后轻松地将其直接传递到 c-jpeg-steganography 中吗?有没有一种简单的方法可以修改 c-jpeg-steganography 库以使其工作?写入临时文件不是一个坏方法吗?

我是个 C 菜鸟...请放轻松。我的大部分经验都是使用那些让我作弊并为我完成所有工作的语言。

最佳答案

隐写术网站没有提供 API 详细信息 AFAICS,这很麻烦。

但是,从您的问题来看,似乎有一个隐写函数需要打开 FILE * (您永远无法处理 FILE ),其中包含未修改的图像,并且可能包含您试图在图像中隐藏的信息。在这种情况下,您可以通过libcurl安排下载该文件。进入一个打开的文件(可能没有名称);然后您可以倒带 FILE *并将其传递给隐写图书馆。

下载该库后,提供的两个主要功能是:

steganolab_encode

/**
* Modifies specified jpeg file so that it contains given message.
* @param file - jpeg file name
* @param data - message to embed
* @param len - message length
* @param password - key string to cipher data and set up PRNG
* @param DCT_radius - which DCT coefficients shall be used to carry
* information, i^2+j^2 <= R^2
* @param stats - pointer to structure to put statistics to. The caller
* must take care about freeing the structure properly. NULL pass
* disables statistics output. The object don't need to be freed if the
* function fails, and it contains no message.
* @return 0: All OK
* not 0: Failed
**/
int steganolab_encode(const char * file, const char * data,
unsigned int len, const char * password, uint8_t DCT_radius,
struct steganolab_statistics * stats);

steganolab_解码

/**
* Reads steganographic message from specified file
* @param file - jpeg file name
* @param data - pointer to pointer to string to put data to
* @param len - pointer to push obtained buffer length to
* @param password - secred string for cipher and PRNG
* @param DCT_radius - which DCT coefficients shall be used to carry
* information, i^2+j^2 <= R^2
* @param stats - statistics object. Free is up to the caller.
* NULL disables the feature. The object don't need to be freed if the
* function fails, and it contains no message.
* @return 0: All OK
* not 0: fail (no buffers need freeing in this case)
*/
int steganolab_decode(const char * file, char ** data,
unsigned int * len, const char * password, uint8_t DCT_radius,
struct steganolab_statistics * stats);

由于函数需要文件名,因此您必须提供文件名。或者您将不得不重写代码以获取您想要的任何内容 - 缓冲区或打开的文件流。

(旁白:代码坚持使用过时且非标准的 header <malloc.h> 来获取 size_t 的定义。如果将对 <malloc.h> (或 "malloc.h" )的每个引用替换为<stdlib.h> ;理论上,如果唯一需要的声明是 <stddef.h> ,它可能会使用 size_t 进行编译。)

关于c - 如何获取网络缓冲区并将其传递到需要 C 中的 FILE 的函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5467021/

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