C++入門(21):バイナリファイル、Cスタイル文字列


C++入門(21):バイナリファイル、Cスタイル文字列
バイナリファイルは、バイナリデータを書き込む方法によって、様々な複雑なデータ型を格納することができる.データをバイナリファイルに書き込み、その呼び出し構文はstd::ofstream fileOutput("filename",std::ios::binary);新しいデータを既存のデータに追加するには、std::ios.appを追加する必要があります.すなわち、std::ofstream fileOutput("filename",(std::ios::binary) | (std::ios.app));バイナリを書くにはwrite()関数を呼び出す必要があります.2つのパラメータです.1つ目は、ファイルに書き込まれたバイナリデータのメモリ内のアドレスです.この値はcharタイプのポインタに変換する必要があります.2番目のパラメータは、書き込まれたバイナリデータをバイトで計算する全長であり、この値は正確でなければならない.最も正確な方法はsizeofオペレータでそれを得ることである.例:
int number = 345678;
fileOutput.write(reinterpret_cast<char *>(&number), sizeof(number)) ;
<<オペレータはテキストを送信し、write()関数はメモリ内のデータ(それらは永遠にバイナリである)をコピーし、「送信」と「コピー」の違いのため、write()関数の最初のパラメータはポインタ(ある所与の内蔵ブロックのアドレス)でなければならない.
Cスタイル文字列strncpy()関数には3つのパラメータがあります.1番目のパラメータは宛先変数で、2番目のパラメータはソース変数で、3番目のパラメータは今回コピーした最大文字数です.c_str()関数は、C++文字列をC文字配列に変換します(文字列終了フラグとして空白文字が自動的に追加されます).
fstreamタイプの変数を作成してから、ファイルを開くときにstd::ios::outまたはstd::ios::inをフラグの1つとして使用して、書き込みまたは読み取り操作を行うことを示すことができます.
読み出しデータread()
std::ifstream fileInput("filename", std::ios::binary);  fileInput.read(reinterpret_cast<char *>(&var),sizeof(var));  //         var              

ビッグエンドバイト(big endian):データの最上位バイトがメモリに一番前に格納され、リトルエンドバイト(little ebdian):データの最上位バイトがメモリに一番後ろに格納されます.
ランダムアクセスバイナリファイルifsteramストリームにはgetというポインタがあり、次回の読み取り操作で読み出すデータを指します.ofstreamストリームにはputというポインタがあり、次回の書き込み操作が書き込まれる位置を指します.fstreamストリームにはgetとputの2つのポインタがあります.
getポインタとputポインタの現在位置はtellg()とtellp()関数でそれぞれ調べることができる.この2つの関数は、getまたはputポインタがファイルの先頭から何バイト離れているかを示すlong整数であるpos_typeタイプの値を返します.
seekg()とseekp():最初のパラメータは移動距離です.2番目のパラメータはオプションで、デフォルトはファイルの先頭から計算され、値はstd::ios::begin、std::ios::end、std::ios.curです.ファイルの長さは、ポインタがファイルの末尾にあるtellg()からポインタがファイルの先頭にあるtellg()を減算することに等しい.
コマンドラインパラメータには、句点.やアスタリスク*などの文字があります.コマンドラインパラメータとして使用するには、単一引用符で囲まなければなりません.
C++入門(20):文字列