Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.103 c