-
Добрый день.
Каким наиболее оптимальным образом (быстрее и проще), конвертировать строку Unicode в RawByteString, и обратно?
Спасибо.
-
Наиболее оптимальный образ (быстрее и проще) - оператор присваивания :=
var LUS: UnicodeString; LRBS: RawByteString; begin LUS := 'Hello, world!'; LRBS := LUS; // RawByteString -> UnicodeString LUS := LRBS; // UnicodeString -> RawByteString end;
-
А вот нифига ... ругается он: implicit string cast, говорит, with potential data loss from 'string' to 'RawByteString' И ведь действительно данные теряются ;)
-
-
> Игорь Шевченко © (20.06.17 23:33) [3]
да вот и я ничего умнее, чем через TBytes и не придумал.
StringRes := WideStringOf(BytesOf(RBS)) и в другую сторону Bytes: TBytes; Bytes := WideBytesOf(UnicodeStr); SetString(ResultRBS, PAnsiChar(Pointer(Bytes)), Length(Bytes));
Ток на мой непроникровенный взгляд, слишком уж очень много телодвижений: из одного копировать в другое, затем в третье. Хотя,.. могу и ошибаться.
-
> Empleado © (20.06.17 17:25)
что находится в RawByteString? ansi или utf-8?
-
RawByteString используется как буфер компонентами IP*Works для пересылки данных на другой конец света. В этот буфер помещаются любые данные (числа, файлы, строки любого типа)
-
> Empleado © (21.06.17 11:09) [6]
я не знаком с этими компонентами, но если там есть перегруженные функции для отправки TBytes/TStream, то лучше использовать их. использование строк для пересылки произвольных данных это дурной тон уже не одно десятилетие.
-
> RawByteString используется как буфер компонентами IP*Works > для пересылки данных на другой конец света.
Вот за это некоторых разработчиков побить хочется, ведь даже Emb сама пишет, что RBS нужны только для избегания перекодирования строк при передачи в процедуры, а для буферов есть TBytes. Но нет, мы будем удалять гланды через *опу. А ты потом думай: или в своём проекте всё тоже через опу делать, или лишние пересылки RBS <-> TBytes.
|