Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

WideString из массива.   Найти похожие ветки 

 
newcounter   (2007-08-14 12:59) [0]

У меня есть некоторый массив заполненный данными, среди этих данных мне нужно считать строку типа WideString заранее известной длины.
Привожу код для примера. У меня ничего не получилось. Что я делаю не так?

type
 PData = ^TData;
 TData = record
   Dt: array [0..$FF - 1] of Byte;
   Position: Integer; // текущая позиция
 end;

function GetWideString(Data: PData; NeedLength: Integer): WideString;
begin
 Result := "";
 while NeedLength > 0 do
 begin
   Result := Result + PWideChar(LongWord(Data) + Data^.Position)^;
   Inc(Data^.Position, SizeOf(WideChar));
   Dec(NeedLength, SizeOf(WideChar));
 end;
end;


 
Сергей М. ©   (2007-08-14 13:04) [1]


> У меня ничего не получилось


А что должно было "получиться" ?

и к чему эти выкрутасы с массивами и записями, если при фигуранте с именем Position гораздо логичней было бы использование наследника TMemoryStream ?


 
newcounter   (2007-08-14 16:38) [2]


> А что должно было "получиться" ?и к чему эти выкрутасы с
> массивами и записями, если при фигуранте с именем Position
> гораздо логичней было бы использование наследника TMemoryStream
> ?


Получиться должна была на выходе WideString строка. У меня ничего не получилось, ерунда просто. Не знаю, как из массива корректно достать widestring. Как это все же сделать?

Использовать MemStream не получится. Я лишь доделываю функцию в проект, а на этом извращенном массиве и записях, много кода написано.


 
MetalFan ©   (2007-08-14 17:37) [3]


> Не знаю, как из массива корректно достать widestring.


type
 TSomeArr = array[0..C_SomeSize-1] of byte;
var
 lArr: TSomeArr;
 lWStr: WideString;
begin
 SetLength( lWStr, C_SomeSize div 2 );
 Move( lArr[0], lWStr[1] );


 
MetalFan ©   (2007-08-14 17:38) [4]

upd:   Move( lArr[0], lWStr[1], C_SomeSize );


 
oxffff ©   (2007-08-14 19:38) [5]


> MetalFan ©   (14.08.07 17:38) [4]
> upd:   Move( lArr[0], lWStr[1], C_SomeSize );


А если CSomeSize нечетное? :)


 
MetalFan ©   (2007-08-16 19:28) [6]


> А если CSomeSize нечетное? :)

я привел пример кода)
если нечетное, то один байт "отвалится"


 
oxffff ©   (2007-08-17 17:50) [7]


> если нечетное, то один байт "отвалится"


Второй байт "Отвалиться". А первый перезатрет байт вне lWStr



Страницы: 1 вся ветка

Текущий архив: 2007.09.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
10-1136912431
IGray
2006-01-10 20:00
2007.09.09
Конвертация TGUID в строку и обратно


15-1187122325
AntiUser
2007-08-15 00:12
2007.09.09
Есть ли различия?


15-1186779156
Petr V. Abramov
2007-08-11 00:52
2007.09.09
я в шоке от таких запросов


15-1186748515
Slider007
2007-08-10 16:21
2007.09.09
С днем рождения ! 10 августа 2007 пятница


2-1187553240
C0derr
2007-08-19 23:54
2007.09.09
Как сделать картинку в фрейме неподвижной при вертик. прокрутке?