У меня простой вопрос.
Я хочу использовать 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());
Итак, должно быть безопасно хранить двоичные данные правильно?
std::vector<unsigned char>
- person M.M   schedule 23.09.2014