簡単な質問があります。
AnsiString をバイナリ データのコンテナーとして使用したいと考えています。私はほとんどの場合、TMemoryStream または TFileStream からそのようなデータをロードし、いくつかの処理後に AnsiString から保存します。正常に動作し、問題は見つかりませんでした。
しかし、私が見たところ、そのように使用することで、Sysutils::TBytes
代わりに使用する議論が巻き起こっています。なんで?Sysutils::TBytes
たとえば、内部に格納されているデータを操作するために使用できる便利なメソッドははるかに少ないですAnsiString
。AnsiString と比較すると、明らかに中途半端なコンテナーです。
通常の文字列への変換について気にする必要がある唯一の問題ですか、それとも適切でないものを実際に使用する必要がある他の何かがありますTBytes
か? AnsiString を他の文字列型に変換することはしません。これは、別の場所で考えられる問題として引用されていることです。
データをロードする方法の例:
AnsiString data;
boost::scoped_ptr<TFileStream> fs(new TFileStream(FileName, fmOpenRead | fmShareDenyWrite));
data.SetLength(fs->Size);
fs->Read(data.c_str(), fs->Size);
データを保存する方法の例:
// fs wants void * so I have to use data.data() instead of data.c_str() here
fs->Write(data.data(), data.Length());
では、バイナリデータを正しく保存しても安全でしょうか?