【发布时间】:2019-03-09 21:30:13
【问题描述】:
所以我遇到了这个问题,我对文件的处理不是很熟练,我刚在大学开始 C++ 课,对于第一个作业,基本上我需要从二进制文件中提取特定字节,然后进一步处理它们。
二进制文件如下所示:
01001001 01001001 00000101 00000000 00001010 00000000 00001100 00000000
00101101 00101110 00101111 00110000 00110001 00101000 00101001 00101010
...
其中前 8B 是一些管理属性的 2B 值。 (即 0-2B 是宽度,2-4B 是高度等) 而我需要一一读取这些 2B 属性,并将它们的值保存到 uint16_t 变量中。到目前为止,我得到的最远的是:
int main(void) {
fstream f1;
uint16_t endian, width, height, format;
f1.open("input_01.img", ios::in | ios::binary);
f1.get((char*) &endian, 2);
f1.get((char*) &width, 2);
f1.get((char*) &height, 2);
f1.get((char*) &format, 2);
/*...*/
}
这段代码正确读取了第一个 2B,但由于某种原因它停止工作......我不确定我是否不理解 get() 函数的工作原理,或者我的方法是否完全错误......
【问题讨论】:
-
我不确定你是否可以像这样使用参考转换。
-
@vcloarec 他在拿地址,没有参考。
-
我不认为你应该使用
f1.get()它停在\n字符。尝试使用f1.read()。 -
@Mirko,当然,我累了……
-
对不起,我的 b。 '4' 只是一个错字,因为在作业中有不同的文件,这些文件具有不同大小的管理道具......