c语言怎么解析midi文件,C++读取midi文件出现问题

本文探讨了在C++中读取MIDI文件时遇到的问题,特定字节09-0d无法通过标准输入流正确读取。作者分享了解决方案,即使用`in.get()`替代`in >> z`,并提到了C++输入输出流对某些特殊字符的处理问题。
摘要由CSDN通过智能技术生成

本人用C++读取midi文件时发现部分字节会自动跳过。每当读到09 0a 0b 0c 0d时就读不出来,其他都可以正常读取。读取文件的代码如下

string getMidiData(char midi[])//读取midi文件

{

ifstream in(midi,ios::binary);//将midi文件打开

if(!in)

{

cerr<

exit(1);

}//假如打开失败,则结束程序

unsigned char z;//用于将文件内容读入的中转变量

stringstream Temp;//用于读取midi文件内容的字符串流

string Contain;//文件内容

while (in >> z)

{

Temp<

}//将文件转为stringstream

Contain = Temp.str();//将字符串流转化为字符串

in.close();//关闭输入

return Contain;

}

(上传图片老是失败,本人用文字描述一下结果)

原来的文件里面是00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11

读取出来的字符串是00 01 02 03 04 05 06 07 08 0e 0f 10 11

有没有高手解释一下这是为什么啊?谢谢了!

解决方案

20

09 0a 0b 0c 0d,是不可见字符,不能使用“in >> z”读取出来,C++的输入输出流很不好使,特别是>><

可以使用 in.get,代替“in >> z”

10

本人查了函数std::istream::operator>>并没有右操作数为unsigned char的重载,改用.get()试试

10

可以用二进制读取,.read

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++读取midi文件出现问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值