Jeremy Mullin
Jeremy Mullin

Reputation: 4240

What is the best way to convert TBytes (UTF-16) to a string?

What is the best way to convert an array of bytes declared as TBytes to a unicode string in Delphi 2009? In my particular case, the TBytes array has UTF-16 encoded data already (2 bytes for each char).

Since TBytes doesn't store a null terminator, the following will only work if the array happens to have #0 in the memory adjacent to it.

MyString := string( myBytes );

If not, the string result will have random data at the end (it could also probably cause a read violation depending on how long it took to encounter a #0 in memory).

If I use the ToBytes function, it returns 't'#0'e'#0's'#0't'#0, which is not what I want.

Upvotes: 11

Views: 26313

Answers (3)

Bruce McGee
Bruce McGee

Reputation: 15334

StringOf converts TBytes to a UnicodeString. BytesOf converts a UnicodeString to TBytes.

Upvotes: 13

Bruce McGee
Bruce McGee

Reputation: 15334

If your TBytes contains UTF-16 characters, look at WideStringOf and WideBytesOf.

Upvotes: 4

Jeremy Mullin
Jeremy Mullin

Reputation: 4240

I ended up using

TEncoding.Unicode.GetString( MyByteArray );

Upvotes: 20

Related Questions