请问如何用fread读取.mp3等非文本文件

tiancaiak 2009-03-13 05:40:40
今天在用fread读文件,发现读.mp3文件时,文件明明是10几mb但用fread(buf)时,buf的值只有一点点,查到说是.mp3文件中有\0结束符,所以会读到\0时会提前结束

请问有没有好一点的读.mp3等文件的解决方案
...全文
814 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiancaiak 2009-03-13
  • 打赏
  • 举报
回复
感谢大家,我不能把buf看成字符串,把buf看成一块内存就行了
arong1234 2009-03-13
  • 打赏
  • 举报
回复
没有所谓的EOF字节,也不会出现在buf中

[Quote=引用 5 楼 chin_chen 的回复:]
判断时试一下EOF
while(string!=EOF)
{
.....
}
[/Quote]
arong1234 2009-03-13
  • 打赏
  • 举报
回复
为什么EOF? fread返回值不是告诉你读了多少字节了?
[Quote=引用 5 楼 chin_chen 的回复:]
判断时试一下EOF
while(string!=EOF)
{
.....
}
[/Quote]
chin_chen 2009-03-13
  • 打赏
  • 举报
回复
判断时试一下EOF
while(string!=EOF)
{
.....
}
  • 打赏
  • 举报
回复
保证读正确你最好用2进制的方式来读取吧。
chin_chen 2009-03-13
  • 打赏
  • 举报
回复
mp3的格式有很多种 暂时没有统一的规范 里面可以内嵌歌曲信息和歌词等 有的习惯放在头部 有的喜欢放到尾部 中间才是2进制 是可以读的 但是里面真正的音频是使用霍夫曼编码的总是很麻烦 搞过一阵 没有统一标准放弃了 有类库libmad如果没记错
chin_chen 2009-03-13
  • 打赏
  • 举报
回复
无意义的读,可以用二进制方式打开,一个byte一个byte读.

mp3 是 MPEG-1 的 音频(Audio) Layer 3 数字音频编码 有损压缩 格式。有意义的读写是解码和编码。
arong1234 2009-03-13
  • 打赏
  • 举报
回复
这问题不在于fread,fread也不会提前结束。问题在于:你不能把读到的内容当“字符串”用,如果你不是用字符串访问的函数去使用它,buf不会只有一点点的
也就是说:buf里到底有多少,你不能用strlen去检查,因为这是字符串函数,而mp3内部显然不是字符串
要得到buf内到底有多少内容,你应该依赖fread的返回值,而不是某个api去查,任何api都不可能告诉你buf里到底有多少内容,因为你buf内部不再有标记告诉你哪是buf的结束

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧