皆さん、ビデオファイルを16進エディターまたはNotepad++ 16進エディタープラグインでコピーして貼り付けると、まったく問題なく動作します。では、ビデオファイルの行数を調べたいと思います。
まず)ビデオ ファイルを Notepad++ で開くと、行の総数は 1876 です (一番左の列)。
2) ファイルを 16 進モードで表示すると、行の総数は 39240 です。
3番目に)同じビデオファイルから行数を読み取るための 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_ファイルフォーマット
ここで、ビットマップ ファイルがさまざまな固定長および可変長のチャンクに分割されていることがわかります。たとえば、BMP ファイルの最初の 14 バイトはビットマップ ヘッダーであり、ファイルに関する一般的な情報を示します。その他のヘッダーは、画像のピクセル形式、幅、高さなどを示します。ヘッダー内のこのデータを使用して、ファイルに保存されている残りの画像データを理解できます。
答え2
ビデオ ファイルには「行」という便利な概念はありません。なぜ「行」の数を調べるのですか?
報告された数値の違いについて:Notepad++はおそらく「\n」だけでなくより多くの改行を検出します(例えばhttp://en.wikipedia.org/wiki/改行ファイルを16進モードで表示すると、1行あたり2文字、1バイトあたり固定幅で表示されるので、
hex > notepad++ > あなたのコード
合理的に思えます。