Конференция "Основная" » Конвертация String <-> RawByteString
 
  • Empleado © (20.06.17 17:25) [0]
    Добрый день.

    Каким наиболее оптимальным образом (быстрее и проще), конвертировать строку 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]
  • 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.
 
Конференция "Основная" » Конвертация String <-> RawByteString
Есть новые Нет новых   [118476   +37][b:0][p:0]