Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1186782789
Petr V. Abramov
2007-08-11 01:53
2007.09.09
C. Иванов привазвал наказывать за уклонение от :")


3-1178093521
Анна
2007-05-02 12:12
2007.09.09
Какими компонентами пользоваться для доступа к БД?


2-1187083802
programmist87
2007-08-14 13:30
2007.09.09
Как записать текст в файл?


2-1187264005
Johnnnnnnn
2007-08-16 15:33
2007.09.09
Генератор паролей помогите разобраться


2-1187073730
>>DEATH<<
2007-08-14 10:42
2007.09.09
получение ресурсов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский