![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WideString - > UnicodeString [D7, XP]
gosha73 © (2007-03-04 23:38:00)Приветствую друзья.
Подскажите пожалуйста каким образом получить содержимое памяти WideString в более безопасном варианте чем мой:
var wStr : WideString;
s : String;
begin
wStr := 'Ю';
s := PChar(wStr); вот здесь появляется warning
...
end;
Мне необходимо заполучить в S именно двухбайтовые значения, которые хранит в памяти wStr для своих символов. Моим методом все работает, но warning понятно почему появляется. Может есть более грамотная функция, которая позволит получить содержимое WideString в обычный String в том двухбайтовом виде как оно в памяти лежит?
Desdechado (2007-03-05 13:19:00) [1]А чем тебя не устраивает WideString ?
palva (2007-03-05 13:07:00) [2]
{$APPTYPE CONSOLE}
var
wStr: WideString;
s : String;
len, i: Integer;
begin
wStr := '123Ю456';
len:= Length(wStr) * 2;
SetLength(s, len);
Move(wStr[1], s[1], len);
// а теперь напечатаем:
for i:=1 to len do Write(Ord(s[i]):3);
WriteLn; // 49 0 50 0 51 0 46 4 52 0 53 0 54 0
ReadLn;
end.
gosha73 (2007-03-05 00:11:00) [3]Я к сожалению не особо знаю как пользоваться Move.
Вот так вот пробую, но что-то на выходе полная ерунда...
Может знаете как правильно?
SetLength(s, SizeOf(wStr));
Move(Pointer(wStr), s[1], Length(s));
palva (2007-03-04 23:47:00) [4]Метод не очень корректный. Например, если у вас в строке попадется цифра, то строка скопируется частично, поскольку копирование натолкнется на нулевой байт, которым все и кончится.
Стандартной функции быть не должно, поскольку процедура уж очень нестандартная.
По моему, корректно будет установить нужную длину для s, а потом применить функцию Move (с явным указанием длины копирования)