Каков наилучший способ преобразования TBytes (UTF-16) в строку? - PullRequest
8 голосов
/ 03 ноября 2008

Каков наилучший способ преобразования массива байтов, объявленных как TBytes, в строку Unicode в Delphi 2009? В моем конкретном случае массив TBytes уже содержит данные в кодировке UTF-16 (2 байта на каждый символ).

Так как TBytes не хранит нулевой терминатор, следующее будет работать только в том случае, если массив окажется с # 0 в памяти рядом с ним.

MyString := string( myBytes );

Если нет, строковый результат будет иметь случайные данные в конце (это также может вызвать нарушение чтения в зависимости от того, сколько времени потребовалось, чтобы встретить # 0 в памяти).

Если я использую функцию ToBytes, она возвращает 't' # 0'e '# 0's' # 0't '# 0, что не то, что я хочу.

Ответы [ 3 ]

15 голосов
/ 04 ноября 2008

В итоге я использовал

TEncoding.Unicode.GetString( MyByteArray );
9 голосов
/ 03 ноября 2008

StringOf преобразует TBytes в UnicodeString. BytesOf преобразует UnicodeString в TBytes.

4 голосов
/ 04 ноября 2008

Если ваши TBytes содержат символы UTF-16, посмотрите на WideStringOf и WideBytesOf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...