我正在编写一个C程序来从相机中获取JPEG帧并用它做各种各样的事情。我有以下功能:
static void process_frame(const void *p, int size) {
fwrite(p, size, 1, stdout);
}
它非常适合将帧写入stdout,但我真正需要的是这样的(“swrite”类似fwrite
,但是char
而不是文件):
static char* process_frame(const void *p, int size) {
char* jpegframe;
swrite(p, size, 1, jpegframe);
return jpegframe;
}
不幸的是,没有swrite功能(至少不是我能找到的)。 所以......
是否有类似“swrite”功能的功能?
或
如何将process_frame函数与printf
(因此sprintf
)而不是fwrite
一起使用?
答案 0 :(得分:7)
char
只是一个字符。你的意思是一个char缓冲区;而且!您的p
已经是一个。只需使用(char*)p
(将您的void指针强制转换为char指针),或memcpy
p
指向您选择的char缓冲区的内容。
Deamentiaemundi提出了一个很好的观点:你可能会p
作为const void*
出于某种原因;如果你打算修改数据,你肯定应该记住这些内容。
答案 1 :(得分:5)
在引擎盖下,似乎你的指针p
只是一个很大的字节数组。您可以将其强制转换为char数组并使用它:
char *jpegframe = (char *) p;
如果您想修改框架,可能需要分配更多内存并将其复制到:
static char* process_frame(const void *p, int size) {
char* jpegframe = malloc(size);
memcpy(jpegframe, p, size);
/* Do the processing... */
return jpegframe;
}