最近在分析雷神的找NALU程序时,总觉得最后一个NALU长度求得不对,但是跟了一下以及用UE工具看了,雷神的写法都是对的,那么一定是我理解错了。果不其然,我忽略了EOF的问题。知识需要总结,所以利用这个机会总结在此,总结了C++与C对于EOF的一些处理。
C++用了istream &get( char &ch)方法,而C用了fgetc方法去读取一个字节
自己觉得写得透彻的文章列在下面:
【转】:https://www.cnblogs.com/dolphin0520/archive/2011/10/13/2210459.html
总结几点:
(1).文件结束符EOF定义为-1,但是并不是在文件中实实在在存在的
(2).C++的eof()方法与C的feof方法
eof(): 如果达到关联的输入文件末尾,eof函数返回true,否则返回false
feof:The function feof() tests the end-of-file indicator for the stream pointed to by stream, returning nonzero if it is set
但是二者都不是以读完流文件最后一个字节来判断达到了文件末尾的,二者都是在读完流文件最后一个字节后再读一个字节后判断达到流末尾的,而EOF则在fgetc函数读错或者达到文件末尾(读完最后一个字节再读一个字节)时产生,而C++的get方法似乎行为与C不同,读完最后一个字节再读一次最后一个字节