gpt4 book ai didi

c - 接收rtp包并写入二进制文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:03 24 4
gpt4 key购买 nike

我正在从服务器接收 rtp 数据包,我必须将它们写入 .mp3 文件,我有几个关于如何完成此任务的问题。我收到的最后一个数据包包含一个“END”字符串。我的代码如下:

int size = 524;
char rtp[size];

FILE *f;
f=fopen("music.mp3","wb");


while(strcmp((char *)rtp, "END")){
recvfromserver(socket,rtp,sizeof(rtp));
fwrite(rtp, sizeof(rtp), 1, f);
}

fclose(f);

我的问题如下:

char 是这种数据包的正确类型吗?我必须以二进制形式编写文件,所以我不知道我是否做对了。

如何在不写入 rap 数据包 header 的情况下写入文件?这个 header 是 12B,我应该在执行 fwrite() 之前将其删除,但我不知道我是否必须使用 char 或 int。

提前致谢!

最佳答案

是的 char* 是满足您需要的正确数据类型。事实上我更倾向于使用unsigned char*

我对您的代码做了以下修改:-

  • 初始化 rtp 缓冲区 - 想一想定义 rtp 的堆栈内存包含 "END\0XXX" 的情况?您的写循环将永远不会执行。从堆栈初始化变量始终是一个好习惯
  • 因为你说你不需要从 rtp 写入前 12 个字节,所以我在 fwrite 中将字节指针提前了 12
  • fwrite 的第二个参数调整了 12 个字节,以确保您不会写入超过 524 个字节的 rtp
  • 您可能需要考虑从recvfromserver 得到的结果是一个以空字符结尾的字符数组吗?

修改后的代码:-

int size = 524;
char rtp[size] = {0}; //Initialized rtp

FILE *f;
f=fopen("music.mp3","wb");

while(strcmp((char *)rtp, "END")){
recvfromserver(socket,rtp,sizeof(rtp));
fwrite(rtp+12, sizeof(rtp)-12, 1, f); //adjusted for 12 bytes of header
}

fclose(f);

关于c - 接收rtp包并写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658476/

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