2008-11-03 9 views
8

¿Cuál es la mejor manera de convertir una matriz de bytes declarados como TBytes a una cadena Unicode en Delphi 2009? En mi caso particular, la matriz TBytes ya tiene datos codificados en UTF-16 (2 bytes para cada char).¿Cuál es la mejor forma de convertir TBytes (UTF-16) en una cadena?

Como TBytes no almacena un terminador nulo, lo siguiente solo funcionará si la matriz tiene un # 0 en la memoria adyacente.

MyString := string(myBytes); 

Si no es así, el resultado cadena tendrá datos aleatorios al final (también probablemente podría causar una violación de lectura dependiendo de cuánto tiempo se tardó en encontrarse con un # 0 en la memoria).

Si uso la función ToBytes, devuelve 't' # 0'e '# 0's' # 0't '# 0, que no es lo que quiero.

Respuesta

13

Terminé usando

TEncoding.Unicode.GetString(MyByteArray); 
8

StringOf convierte TBytes en UnicodeString. BytesOf convierte un UnicodeString en TBytes.

+0

Gracias Bruce, revisé mi pregunta original, ya que no era lo suficientemente específica. La matriz TBytes está codificada como datos utf16, por lo que ToBytes no funciona. –

+0

Dulce. Tan simple como 8 caracteres: StringOf :) – Ampere

4

Si sus TBytes contienen caracteres UTF-16, mire WideStringOf y WideBytesOf.

Cuestiones relacionadas