とある原子核実験のブログ
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
データの圧縮率を考えて実験のデータはバイナリ形式で保存することが多い。
データを開いて解析するときバイナリデータをデコードする必要がある。例えば
od -x data.dat } less
というコマンドを打って
0x00102312
という4byteのデータを得たとしよう。
その際データ構造が
0:15 実際のデータ
16:18 ch
19:
こうなればrootなりpawなりでいじり放題。
ちなみにファイルを開く際C言語ならFILE ポインタでファイルのディスクリプタを取得しそれに対してfread,C++ならifstreamでファイルオブジェクトを作成し、バイナリモードでファイルを開く。その後readメソッドを読みだすということをする。
ファイルの最後まで読みだす時、
ifstream::eof()メソッドをもちいることができる。
しかしそれは最後のデータを読んだときに1になる。
すなわち
while(fin.eof()){
}
という用い方をすると1回余分にループが回ってしまう。
これを回避するためには
while(1){
if(fin.eof()) break;
}
とか
while(fin.read<>){
}
とかすればよい。
実際に用いるデータはヘッダとしてevの情報、データのサイズなどが書かれていることが多い。
その際は下の方法を用いると楽である。
データを開いて解析するときバイナリデータをデコードする必要がある。例えば
od -x data.dat } less
というコマンドを打って
0x00102312
という4byteのデータを得たとしよう。
その際データ構造が
0:15 実際のデータ
16:18 ch
19:
こうなればrootなりpawなりでいじり放題。
ちなみにファイルを開く際C言語ならFILE ポインタでファイルのディスクリプタを取得しそれに対してfread,C++ならifstreamでファイルオブジェクトを作成し、バイナリモードでファイルを開く。その後readメソッドを読みだすということをする。
ファイルの最後まで読みだす時、
ifstream::eof()メソッドをもちいることができる。
しかしそれは最後のデータを読んだときに1になる。
すなわち
while(fin.eof()){
}
という用い方をすると1回余分にループが回ってしまう。
これを回避するためには
while(1){
if(fin.eof()) break;
}
とか
while(fin.read<>){
}
とかすればよい。
実際に用いるデータはヘッダとしてevの情報、データのサイズなどが書かれていることが多い。
その際は下の方法を用いると楽である。
PR
Comment