Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Конвертация String <-> RawByteString


Empleado ©   (20.06.17 17:25

Добрый день.

Каким наиболее оптимальным образом (быстрее и проще), конвертировать строку Unicode в RawByteString, и обратно?

Спасибо.


Converter   (20.06.17 18:02[1]

Наиболее оптимальный образ (быстрее и проще) - оператор присваивания :=

var
 LUS: UnicodeString;
 LRBS: RawByteString;
begin
 LUS := 'Hello, world!';
 LRBS := LUS; // RawByteString -> UnicodeString
 LUS := LRBS; // UnicodeString -> RawByteString
end;


Empleado ©   (20.06.17 18:37[2]

А вот нифига ...
ругается он:
implicit string cast, говорит, with potential data loss from 'string' to 'RawByteString'
И ведь действительно данные теряются ;)


Игорь Шевченко ©   (20.06.17 23:33[3]

https://stackoverflow.com/questions/24057569/cast-from-rawbytestring-to-string-does-automatically-invoke-utf8decode


Empleado ©   (21.06.17 01:08[4]


> Игорь Шевченко ©   (20.06.17 23:33) [3]

да вот и я ничего умнее, чем через TBytes и не придумал.

StringRes := WideStringOf(BytesOf(RBS))
и в другую сторону
Bytes: TBytes;
Bytes := WideBytesOf(UnicodeStr);
SetString(ResultRBS, PAnsiChar(Pointer(Bytes)), Length(Bytes));

Ток на мой непроникровенный взгляд, слишком уж очень много телодвижений: из одного копировать в другое, затем в третье.
Хотя,.. могу и ошибаться.


Eraser ©   (21.06.17 04:20[5]


> Empleado ©   (20.06.17 17:25) 

что находится в RawByteString? ansi или utf-8?


Empleado ©   (21.06.17 11:09[6]

RawByteString используется как буфер компонентами IP*Works для пересылки данных на другой конец света.
В этот буфер помещаются любые данные (числа, файлы, строки любого типа)


Eraser ©   (21.06.17 13:25[7]


> Empleado ©   (21.06.17 11:09) [6]

я не знаком с этими компонентами, но если там есть перегруженные функции для отправки TBytes/TStream, то лучше использовать их. использование строк для пересылки произвольных данных это дурной тон уже не одно десятилетие.


Alekc   (27.06.17 11:41[8]


> RawByteString используется как буфер компонентами IP*Works
> для пересылки данных на другой конец света.


Вот за это некоторых разработчиков побить хочется, ведь даже Emb сама пишет, что RBS нужны только для избегания перекодирования строк при передачи в процедуры, а для буферов есть TBytes. Но нет, мы будем удалять гланды через *опу. А ты потом думай: или в своём проекте всё тоже через опу делать, или лишние пересылки RBS <-> TBytes.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо