Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2008, 04:17   #1
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
Вопрос как сравнить 2 блока памяти7

доброе время суток. у меня такая проблема мучаюсь уже 2й день. имеются 2 блока памяти из tmemorystream и мне надо сравнить их содержимое, как это можно осуществить7
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 01.04.2008, 08:38   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Может я не совсем понял вопрос. Уж слишком просто получается.

type TByteArray : array [maxint] of byte;

И в цикле - приведение типов и сравнение

TByteArray(buffer1^)[i] = TByteArray(buffer2^)[i]

Это для pointer. Для других типов аналогично.
alexBlack вне форума Ответить с цитированием
Старый 01.04.2008, 08:49   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если так попробовать:
Код:
var t2,t:TMemoryStream;
.....
begin
 if t.Size=t2.Size then 
  if CompareMem(t.Memory,t2.Memory,t.Size) then // Одинаковые
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2008, 08:52   #4
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А если так попробовать:
Код:
var t2,t:TMemoryStream;
.....
begin
 if t.Size=t2.Size then 
  if CompareMem(t.Memory,t2.Memory,t.Size) then // Одинаковые
end;
есть 2 одинаковых блока памяти я сам их капирую из различных файлов, допустим по 1024 байта каждый, и мне надо сравнить значения которые в них, ну не открывать же в блокноте и не сравнивать по симвалам.. это ж бред... а у тя судя по коду сравнивается именно размер...
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 01.04.2008, 10:45   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не понял, а чем вариант решения от Stilet не подходит?!

ну, можно в лоб - установить оба потока на ноль, читать через Read в буфер и сравнивать элементы буфера
что вроде такого:

Код:
    MemoryStream1.Seek(0, soFromBeginning);
    MemoryStream2.Seek(0, soFromBeginning);
    repeat
      Len1 := MemoryStream1.Read(Buffer1, SizeOf(Buffer1));
      Len2 := MemoryStream2.Read(Buffer2, SizeOf(Buffer2));
      if (Len1>0) and (Len2>0) then begin
         for i:=1 to SizeOf(Buffer) do
           if Buffer1[i]<>Buffer2[i] Then begin
             <потоки различны!>
             Exit
           end; 
      end;
    until (Len1 <= 0) or (Len2<=0);
писал прямо в форуме - если что - исправляйте - код я привёл просто для того, чтобы проиллюстрировать свою мысль...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.04.2008, 10:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поясню для тех кто читает, CompareMem сравнивает не размер а содержимое.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнить тексты olimpus Microsoft Office Excel 27 07.11.2008 10:29
Изображение внутри многострочного блока textarea osp HTML и CSS 1 26.08.2008 12:38
Динамик системного блока Михаил Юрьевич Общие вопросы Delphi 4 28.01.2008 18:31
Сравнить колонки Romuald Microsoft Office Excel 11 22.01.2008 09:28
Прокрутка содержимого блока sdevil JavaScript, Ajax 18 26.09.2007 19:33