Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

Pchar и забиение на блоки   Найти похожие ветки 

 
Daiwer   (2005-11-12 19:19) [0]

Есть некоторые данные на которые указывает pchar. Необходимо эти данные разбить на блоки по 4 байта. Преобразование в string не подойдет. Есть какие нибудь мысли?  Заранее благодарен.


 
Anton_K ©   (2005-11-12 20:07) [1]

А в чем проблемма-то?


 
Sergey Masloff   (2005-11-12 20:22) [2]

PChar это указатель. Какая фиг разница на чего он указывает? Двигай указатель шагом N где N хоть 1 хоть 4 хоть сколько байт все вот тебе и разбивка


 
Daiwer   (2005-11-13 15:15) [3]

так, а как двигать то??


 
Anton_K ©   (2005-11-13 15:38) [4]


var P:PChar;
...
P:=P+4;  // двигаем указатель на 4 байта вперед
P:=P-10; // двигаем указатель на 10 байт назад


 
Zeqfreed ©   (2005-11-13 15:50) [5]

Daiwer   (13.11.05 15:15) [3]

type
 TCutCallback = function(block : Cardinal) : Boolean;

...

function CutData(const p : PChar; proc : TCutCallback) : Integer;
var
i : Integer;
block : Cardinal;
begin
i := 0;
if (StrLen(p) >= 4) then repeat
 Move(Pointer(Cardinal(p) + i*4)^, block, 4);
 Inc(i);
until not proc(block) or (((StrLen(p) div 4) - i) < i);

Result := i;
end;

function Callback(block : Cardinal) : Boolean;
begin
Form1.Memo1.Lines.Add(IntToHex(block, 2));
Result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add("String cut into " + IntToStr(CutData(#13#10#14#15#16#32#44#66#88#99, Callback)) + " 4Bytes-pieces");
end;


Примерно так :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.034 c
8-1116052799
ИгорьВал
2005-05-14 10:39
2005.12.04
Как работать с EXIF. Добавить свое/изменить определенное поле.


14-1131801241
Kerk
2005-11-12 16:14
2005.12.04
Купил FIFA Manager 2006


1-1131351866
Mitchy
2005-11-07 11:24
2005.12.04
Загрузить форму из библиотеки в осн. приложение


14-1131551106
Сергей1981
2005-11-09 18:45
2005.12.04
Серийный номер жесткого диска


2-1132236530
DelphiLexx
2005-11-17 17:08
2005.12.04
14pt и пикселы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский