Я конвертирую программу D2006 в D2010. У меня есть значение, хранящееся в одном байте на символьную строку в моей базе данных, и мне нужно загрузить его в элемент управления с LoadFromStream, поэтому я планировал записать строку в поток и использовать ее с LoadFromStream. Но это не сработало. При изучении проблемы я вижу проблему, которая говорит мне, что я не совсем понимаю, как работает преобразование из строки AnsiString в строку Unicode. Вот фрагмент автономного кода, который иллюстрирует проблему, с которой я смущен:;
procedure TForm1.Button1Click(Sender: TObject); {$O-}
var
sBuffer: String;
oStringStream: TStringStream;
sAnsiString: AnsiString;
sUnicodeString: String;
iSize1,
iSize2: Word;
begin
sAnsiString := '12345';
oStringStream := TStringStream.Create(sBuffer);
sUnicodeString := sAnsiString;
iSize1 := StringElementSize(sAnsiString);
iSize2 := StringElementSize(sUnicodeString);
oStringStream.WriteString(sUnicodeString);
end;
Если разбить последнюю строку и проверить свойство Bytes в oStringStream, вы увидите, что оно выглядит так:
Bytes (49 {$31}, 50 {$32}, 51 {$33}, 52 {$34}, 53 {$35}
Я ожидал, что это может выглядеть примерно так:
(49 {$31}, 00 {$00}, 50 {$32}, 00 {$00}, 51 {$33}, 00 {$00},
52 {$34}, 00 {$00}, 53 {$35}, 00 {$00} ...
Видимо, мои ожидания ошибочны. Но как конвертировать AnsiString в юникод?
Я не получаю правильных результатов из LoadFromStream, потому что он читает из потока два байта за раз, но данные, которые он получает, расположены не так. Что я должен сделать, чтобы дать LoadFromStream правильно сформированный поток данных, основанный на строке Unicode?
Спасибо за вашу помощь.