好的,伙计们,使用十六进制编辑器或 notepad++ 十六进制编辑器插件复制和粘贴视频文件完全没问题。现在,我想找到视频文件中的行数-
首先)我用notepad++打开了视频文件,总行数为1876(最左边一列)。
第二)我以十六进制模式查看文件总行数为39240;
第三)我编写了一个 C++ 程序,用于读取同一个视频文件中的行数。我的代码是:
char c;
int total_line=0;
ifstream file("vid.avi",ios::binary | ios::in)
while(!file.eof())
{
c=file.get();
if(c=='\n')
{
total_line++;
}
}
file.close();
cout<<"Total line "<<total_line<<endl;
这总共给出了 1313 行。哪一个是正确的,哪一个是错误的,谁能帮忙。
答案1
视频文件中没有“字符”或“线条”。这是因为,视频文件中的数据不是文本而是视频!:)
因此,要理解包含文本以外内容的文件,您需要以二进制模式打开它,并将文件视为包含多个字节的大量二进制数据。现在,要处理这种文件,您可以分块从该文件读取字节(例如一次 1024 个字节)
现在,要处理此文件并以有意义的方式提取数据,您需要了解该文件的格式以及该特定文件格式的数据以二进制形式布局的方式。
让我们看一下简单的图像文件格式,例如 BMP 格式。http://en.wikipedia.org/wiki/BMP_file_format
您可以在此处看到位图文件如何划分为各种固定和可变长度的块。例如,BMP 文件的前 14 个字节是位图标头,它告诉您有关该文件的一些一般信息。其他标头将告诉您有关图像的像素格式、宽度、高度等信息。您可以在标头中使用这些数据来理解文件中存储的其余图像数据。
答案2
视频文件中没有“线”这个有用的概念。你为什么要寻找“线”的数量?
关于报告数字的差异:Notepad++ 可能检测到的换行符不仅仅是“\n”(例如http://en.wikipedia.org/wiki/Newline)。以十六进制模式查看文件时,文件以每字节 2 个字符显示,每行固定字节宽度,因此
hex > notepad++ > 您的代码
听起来很合理。