【发布时间】:2021-08-26 02:26:58
【问题描述】:
我正在尝试解析 MIDI,它需要一次读取 8 位(一个字节)。在我的系统 (*) 上,ifs.get() 似乎一次抓取 32 位。
std::ifstream ifs;
ifs.open(FileName, std::fstream::in | std::ios::binary);
std::cout << "size:: " << sizeof(ifs.get()) <<std::endl; // returns 4
是否可以简单地指定每次读取的字节数,以便 ifs.get() 一次只能获取一个字节(8 位)?
我相信ifs.get()返回超过8位的原因是:
uint16_t nReadByte = 0;
nReadByte = ifs.get();
std::cout << std::hex << nReadByte <<std::endl;
产生如下结果:
3e,28,0,42,28,0,3b,28
但如果我将变量大小设置为 8 位,我会得到奇怪的字符:
uint8_t nReadByte = 0;
nReadByte = ifs.get();
std::cout << std::hex << nReadByte <<std::endl;
@,,,,.,4,p,s,2,。 (这些似乎在这里没有正确呈现,但有时它们看起来像单个字形中的字母 ETX 和 CAN。
【问题讨论】:
-
您错误地使用了
sizeof。 -
确定
ifs.get()返回多少字节的正确方法是什么?