Вниз
Скачать: 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
15-1187251551
ocean
2007-08-16 12:05
2007.09.09
Невиновен!


15-1187082510
Kostafey
2007-08-14 13:08
2007.09.09
Всякий раз при запуске Win стало появляться это сообщение


15-1186990031
shlst
2007-08-13 11:27
2007.09.09
Что мне не нравится в командной работе?


15-1186999718
SCL
2007-08-13 14:08
2007.09.09
Cоздание игр


2-1187086523
balepa
2007-08-14 14:15
2007.09.09
PWideChar




   Наверх