2008-11-03 32 views
8

Cách tốt nhất để chuyển đổi một mảng byte được khai báo là TBytes thành chuỗi unicode trong Delphi 2009 là gì? Trong trường hợp cụ thể của tôi, mảng TBytes có dữ liệu được mã hóa UTF-16 (2 byte cho mỗi char).Cách tốt nhất để chuyển đổi TBytes (UTF-16) thành chuỗi là gì?

Vì TBytes không lưu trữ một trình kết thúc rỗng, sau đây sẽ chỉ hoạt động nếu mảng xảy ra có # 0 trong bộ nhớ liền kề với nó.

MyString := string(myBytes); 

Nếu không, kết quả chuỗi sẽ có dữ liệu ngẫu nhiên ở cuối (nó cũng có thể gây ra vi phạm đọc tùy thuộc vào khoảng thời gian để gặp bộ nhớ # 0).

Nếu tôi sử dụng chức năng ToBytes, nó trả về 't' # 0'e '# 0' # 0't '# 0, đó không phải là những gì tôi muốn.

Trả lời

13

tôi đã kết thúc bằng

TEncoding.Unicode.GetString(MyByteArray); 
8

StringOf chuyển đổi TByte thành UnicodeString. BytesOf chuyển đổi một UnicodeString thành TBytes.

+0

Cảm ơn Bruce, tôi sửa lại câu hỏi ban đầu của tôi như thế vẫn chưa đủ cụ thể. Mảng TBytes được mã hóa dưới dạng dữ liệu utf16, do đó ToBytes không hoạt động. –

+0

Ngọt ngào. Đơn giản như 8 ký tự: StringOf :) – Ampere

4

Nếu TB của bạn chứa các ký tự UTF-16, hãy xem WideStringOf và WideBytesOf.

Các vấn đề liên quan