c++ 读取二进制文件时tellg()=-1

我有文件夹binarytry.dat,里面是6行168750列的数据,都是unsignedchar型。我想读取第一行的数据,于是写了如下代码:constsize_tfea... 我有文件夹binarytry.dat,里面是6行168750列的数据,都是unsigned char型。
我想读取第一行的数据,于是写了如下代码:
const size_t featureDim = 168750;
ifstream inin("binarytry.dat");
unsigned char arr[featureDim];
inin.read((char*)&arr,featureDim*sizeof(unsigned char));
cout<<inin.tellg()<<endl;//这里输出-1
inin.seekg(0,ios::end);
cout<<inin.tellg()<<endl<<endl;//这里也输出-1

我不明白这是为什么呢?
我测试了一下,当读到第1151个数时,tellg()=4096,我不明白这是为什么呢?
第1151个数时26
展开
 我来答
ouyangxuhua20
2013-09-03
知道答主
回答量:12
采纳率:0%
帮助的人:18万
展开全部
输出-1是因为inin到了文件的末尾以后,指针inin已经变成NULL或者指向未知位置。所以调用tellg()时,始终返回-1,表示失败。可以将featureDim适当调小,应该能返回正值。至于问题补充情况,是因为文件的读取方式未选择二进制。将ifstream inin("binarytry.dat");改成ifstream inin("binarytry.dat",std::ifstream::binary);应该能够解决。
追问
谢谢您!!
嗯嗯,确实加了ios::binary后正确了,但是我想不明白为什么呢?
追答
读取方式会影响结果,二进制的文件应该用二进制方式读取。这可能跟文件流的内在机制有关。
Dobben
2017-12-27
知道答主
回答量:9
采纳率:0%
帮助的人:6056
展开全部
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。
读到文件末,返回EOF被C++eof()捕获置流为-1
二进制,EOF返回,流正常
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式