windows平台下C/C++ write文件大小异常偏大、用wb方式没解决的问题

最近在qt环境下实现往文件中写入视频帧数据时,发现:不管是用fopen还是QFile,write的返回长度时正确的,写入后查看文件大小会偏大若干字节,经过对比排查发现,是空数据0被解析成其他格式类数据,例如0x0d,0x0A,(回车换行之类的转义字符),导致这类字节被算入总大小。百度了相关帖子,通用的做法是使用二进制的方式写入文件,即fopen的第二个参数使用“wb”,试验了下没效果,最后改为“wb+”解决,有点费解,对于写文件这二者没区别:
在这里插入图片描述
不过总算解决了问题,就暂时不深究了,发到这里记录一下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows下使用C语言调用libmp3lame库来实现将wav音频文件压缩为MP3格式,音频参数为11025Hz采样率和8位音频位深。下面是一个简单的实现步骤: 1. 首先,需要下载并安装libmp3lame库。可以在lame官方网站上找到适合Windows系统的库文件,并将其解压到合适的位置。 2. 在C代码中引入libmp3lame库的头文件,例如: #include <lame.h> 3. 创建并初始化lame_t结构体,以便进行编码设置: lame_t lame = lame_init(); lame_set_in_samplerate(lame, 11025); // 设置输入采样率 lame_set_num_channels(lame, 1); // 设置输入的通道数为1 lame_set_brate(lame, 8); // 设置压缩后的比特率 4. 打开输入和输出文件: FILE *input_file = fopen("input.wav", "rb"); // 打开输入wav文件 FILE *output_file = fopen("output.mp3", "wb"); // 打开输出mp3文件 5. 读取输入数据,并将其编码为MP3格式: short int pcm_buffer[8192]; unsigned char mp3_buffer[8192]; int read; int write; do { read = fread(pcm_buffer, sizeof(short int), 8192, input_file); // 读取输入数据 if (read == 0) { write = lame_encode_flush(lame, mp3_buffer, 8192); // 编码剩余数据 } else { write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, 8192); // 编码输入数据 } fwrite(mp3_buffer, sizeof(unsigned char), write, output_file); // 将编码后的数据写入输出文件 } while (read != 0); 6. 清理和关闭: lame_close(lame); // 关闭lame编码器 fclose(input_file); // 关闭输入文件 fclose(output_file); // 关闭输出文件 通过以上步骤,就可以使用libmp3lame库来实现将11025Hz采样率和8位音频位深的wav音频文件压缩为MP3格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值