Главная страница
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.021 c
15-1186754480
Александр Иванов
2007-08-10 18:01
2007.09.09
Не пройдет и полгода, и я появлюсь


2-1187097353
SamProf
2007-08-14 17:15
2007.09.09
Как написать свой intraweb компонент


15-1186914011
TesterMP3
2007-08-12 14:20
2007.09.09
от MP3 отрезать 1 минуту


15-1187168756
Romkin
2007-08-15 13:05
2007.09.09
Нужен компонент или идея


4-1173619548
$00FF00
2007-03-11 16:25
2007.09.09
Создание ярлыка