2011-11-04 12 views
3

私はサイズが "x + a + y"バイトのバイナリファイルを持っています。私にはいくつか質問があります。バイナリファイルの情報を取得、変更しますか?

  • 徹底した読み込みxバイトなしで、どのようにバイトの開始点にジャンプできますか?
  • すべての情報を1行に入れてから、必要な変更を加えて、最後に新しい情報を同じ行に書き込むことなく、開始アドレスがPと表示されている場所のデータの「バイト」を変更するにはどうすればよいですか?
  • Pにある "バイト"の開始点にポインタを置くことはできますか?

パイルファイルにデータを格納する方法に関する質問。

  • パイルファイルに格納されているプリミティブデータ型(intなど)のすべてが符号なしであることが好ましい理由は何ですか?
  • オフセットが常にunsigned intとして選択されるのはなぜですか? 例:X、yが知られている値

    ___________________________________________________________ 
    |        |  |      | 
    |        |  |      | 
    |----------> x <--------------|> a <|-------> y <---------| 
              ^
              ^
               P 
    

プラットフォームのLinux

注:私はdublicate質問をすれば、私はこの質問を削除することができるように、お知らせください。 スムースを指示するときに気分がなくなります

+0

[リンクでバイナリファイルの情報を変更、フェッチのためのワーキングコードを検索:] [1] [1]:http://stackoverflow.com/a/12406355/559746 –

答えて

1

ifstreamには、seekgというメソッドがあり、読み取り位置をファイルの特定の場所に移動します。 http://en.cppreference.com/w/cpp/io/basic_istream/seekgを参照してください。

+1

seekgがためのものです彼が必要としている文章を読むこととシークすること。 – atoMerz

+0

'fstream'を使って読み書きする必要がある場合は、' istream'のメソッドを使ってseakingします。 –

+0

しかし、 'seekg'は限られた方法でしか動作しません。何よりも、任意の位置に移動するには、ファイルをバイナリモードで開く必要があります。 (そうでなければ、 'tellg'で取得した位置だけを探すことができます。)もちろん、ファイルタイプによって' seekg'はまったく動作しないかもしれません(例えばファイルが端末の場合)。 –

関連する問題