我有一个简单的问题。
我想使用 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());
那么正确存储二进制数据应该是安全的吗?