2008-11-03 3 views
8

Jaki jest najlepszy sposób konwersji tablicy bajtów zadeklarowanych jako TBytes na ciąg znaków Unicode w Delphi 2009? W moim szczególnym przypadku tablica TBytes ma już zakodowane dane UTF-16 (2 bajty dla każdego znaku).Jaki jest najlepszy sposób konwertowania TBytes (UTF-16) na ciąg znaków?

Ponieważ TBytes nie przechowuje terminatora o wartości NULL, poniższe czynności będą działać tylko wtedy, gdy macierz będzie miała numer 0 w sąsiadującej z nią pamięci.

MyString := string(myBytes); 

Jeśli nie, to wynik będzie mieć ciąg losowych danych na koniec (może to też prawdopodobnie spowodować naruszenie odczytu w zależności od tego, jak długo to trwało, napotyka # 0 w pamięci).

Jeśli używam funkcji ToBytes, to zwraca 't' # 0'e '# 0's' # 0't '# 0, co nie jest tym, czego chcę.

Odpowiedz

13

skończyło się używając

TEncoding.Unicode.GetString(MyByteArray); 
8

StringOf konwertuje TBytes na UnicodeString. BytesOf konwertuje UnicodeString na TBytes.

+0

Thanks Bruce, ja poprawione moje pierwotne pytanie, jak to było za mało konkretne. Tablica TBytes jest zakodowana jako dane utf16, więc ToBytes nie działa. –

+0

Słodki. Tak prosty jak 8 znaków: StringOf :) – Ampere

4

Jeśli twoje tomy podręcznika zawierają znaki UTF-16, spójrz na WideStringOf i WideBytesOf.