Главная страница
    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.172 c
6-1124450191
Piter
2005-08-19 15:16
2005.12.04
Как грамотно работать с сокетами


14-1131633246
seg
2005-11-10 17:34
2005.12.04
Первопроходцы интернета Винт Серф и Боб Кан получили высочайшую н


2-1132221778
IAMDANIL
2005-11-17 13:02
2005.12.04
Ловушка


2-1132312364
Timon777
2005-11-18 14:12
2005.12.04
ShellExecute и фокус нового окна


1-1131051613
Toxa_ua
2005-11-04 00:00
2005.12.04
ComponentCount в TEdit





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