Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
3-1178876828
Sairex
2007-05-11 13:47
2007.09.09
Локальна сеть и InterBase


15-1186563874
Суслик
2007-08-08 13:04
2007.09.09
Посоветуйте компонент - сохранение desktop а


15-1187164105
Pazitron_Brain
2007-08-15 11:48
2007.09.09
Когда-то давно слышал о такой игре...


9-1159926882
VolanD666
2006-10-04 05:54
2007.09.09
Сглаживаем тени?


2-1187259357
DevilDevil
2007-08-16 14:15
2007.09.09
GetFileTime для выполняемого exe




   Наверх