Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.04.04;
Скачать: CL | DM;

Вниз

Сравнить 2 четырехбайтовых значения   Найти похожие ветки 

 
Scot Storch   (2010-02-05 11:44) [0]

Доброго времени суток. Столкнулся с проблемой: имеется 2 четырехбайтовых значения, которые хранятся в переменных типа Cardinal. Как определить количество последовательно совпадающих байт этих значений?

т.е.
 
$10203040
$10203050

= Совпадает 3 байта


 
Сергей М. ©   (2010-02-05 11:48) [1]

Трактовать оба значения как массивы по четыре байта каждый и в цикле сравнивать эл-ты массивов с соотв.подсчетом и условием выхода из цикла


 
Scot Storch   (2010-02-05 12:14) [2]

Разобрался. Спасибо.


 
Вася   (2010-02-05 12:22) [3]

может как-то так?

type fb=array[0..3] of byte; pfb=^fb;
const a: Cardinal=$10203040; b: Cardinal=$10203050;
...
procedure TForm1.Button1Click(Sender: TObject);
var i, count: byte; pa, pb: pfb;
begin
pa:=@a;
pb:=@b;
count:=0;
for i:=0 to 3 do
     if (pa[i]=pb[i]) then
           inc(count);
ShowMessage(inttostr(count));
end;


 
Sha ©   (2010-02-05 13:30) [4]

> Scot Storch   (05.02.10 11:44)
> ...последовательно совпадающих байт этих значений?
> т.е.
> $10203040
> $10203050
> = Совпадает 3 байта

а для
$10203040
$10209040
результатом должно быть 2 или 3?

> Вася   (05.02.10 12:22) [3]

Если на предыущий вопрос ответом является 2,
то твое решение придется подправить, т.к. оно сравнивает все байты
двойного слова, начиная с low-конца. а автору надо с hi-конца.


 
Sha ©   (2010-02-05 13:33) [5]

Пропустил пару слов:
... а автору надо сравнивать не все и с hi-конца.


 
Вася   (2010-02-05 14:04) [6]

а, чёрт...
"последовательно совпадающих"...=((

     if (pa[i]=pb[i]) then
           inc(count)
     else
           break;


не очень знаю что есть low/hi, но вроде же работает...


 
sniknik ©   (2010-02-05 14:07) [7]

Вася   (05.02.10 12:22) [3]
> может как-то так?
будь проще ;). нафиг цикл?

procedure TForm1.Button1Click(Sender: TObject);
type
 Tb = array[0..3] of byte;
const
 a: Cardinal = $10203040;
 b: Cardinal = $10203050;
var
 Count: integer;
begin
 Count:=
   byte(Tb(a)[0] = Tb(b)[0]) +
   byte(Tb(a)[1] = Tb(b)[1]) +
   byte(Tb(a)[2] = Tb(b)[2]) +
   byte(Tb(a)[3] = Tb(b)[3]);

 ShowMessage(IntToStr(Count));
end;


 
sniknik ©   (2010-02-05 14:08) [8]

а кстати и Count тоже лишний...



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

Текущий архив: 2010.04.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
15-1263479212
Piter
2010-01-14 17:26
2010.04.04
HTML "base href" и JavaScript в IE


2-1264842900
Евгений Р.
2010-01-30 12:15
2010.04.04
Русские буквы в полях ADO-таблиц (DBF)


2-1264951826
pomaxa27
2010-01-31 18:30
2010.04.04
Как реализовать загрузку изображений через страницу


10-1138600010
маленький мук
2006-01-30 08:46
2010.04.04
Номер столбца в Excel по его букве


15-1263452243
brother
2010-01-14 09:57
2010.04.04
Из cmd получить файл по http