![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнить 2 четырехбайтовых значения
Scot Storch © (2010-02-05 11:44:00)Доброго времени суток. Столкнулся с проблемой: имеется 2 четырехбайтовых значения, которые хранятся в переменных типа Cardinal. Как определить количество последовательно совпадающих байт этих значений?
т.е.
$10203040
$10203050
= Совпадает 3 байта
sniknik (2010-02-05 14:08:00) [1]а кстати и Count тоже лишний...
sniknik (2010-02-05 14:07:00) [2]Вася (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;
Вася (2010-02-05 14:04:00) [3]а, чёрт...
"последовательно совпадающих"...=((
if (pa[i]=pb[i]) then
inc(count)
else
break;
не очень знаю что есть low/hi, но вроде же работает...
Sha (2010-02-05 13:33:00) [4]Пропустил пару слов:
... а автору надо сравнивать не все и с hi-конца.
Sha (2010-02-05 13:30:00) [5]> Scot Storch (05.02.10 11:44)
> ...последовательно совпадающих байт этих значений?
> т.е.
> $10203040
> $10203050
> = Совпадает 3 байта
а для
$10203040
$10209040
результатом должно быть 2 или 3?
> Вася (05.02.10 12:22) [3]
Если на предыущий вопрос ответом является 2,
то твое решение придется подправить, т.к. оно сравнивает все байты
двойного слова, начиная с low-конца. а автору надо с hi-конца.
Вася (2010-02-05 12:22:00) [6]может как-то так?
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;
Scot Storch (2010-02-05 12:14:00) [7]Разобрался. Спасибо.
Сергей М. (2010-02-05 11:48:00) [8]Трактовать оба значения как массивы по четыре байта каждый и в цикле сравнивать эл-ты массивов с соотв.подсчетом и условием выхода из цикла