Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 59, средняя оценка - 4.93
DiffON
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 6
#1

Как сравнить два массива - C++

24.09.2012, 19:17. Просмотров 8589. Ответов 7
Метки нет (Все метки)

Здравствуйте форумчане!
Помогите пожалуйста, скажите как сравнить два массива побитово и побайтово.
В инете ни чего не могу найти((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2012, 19:17     Как сравнить два массива
Посмотрите здесь:

Как сравнить два элемента массива типа string? - C++
Задание. Вычислить какая компания чаще всего участвовала в роли истца. У меня есть массив в котором хранятся названия компаний ...

Найти среднее арифметическое элементов массива, сравнить два массива поэлементно - C++
#include <iostream> #include <math.h> #include <conio.h> using namespace std; void main() { float x, y, SA; int K, KOL,...

Сравнить два массива - C++
Подскажите пожалуйста как решить задачу: Нужно сравнить два массива, проверить все элементы на совпадение и если они совпадают то вывести...

Сравнить логически два массива - C++
Сравнить , используя логическое или(||) два одномерных массива (А и В) и записать результат в массив С Массивы создал , но не знаю как...

Сравнить два массива одинаковой длины - C++
Сравниваю два массива длиной три. Сравнивать нужно с конца. #include <iostream> using namespace std; int main (){ int array; ...

Сравнить два массива, заданных классами - C++
Имеется class array и class array2. В них описаны массивы. И два метода, заполняющие их. Нужно сравнить два этих массива (Вывести...

Сравнить два массива и запомнить номер первых двух совпавших элементов - C++
нужно сравнить два массива,например 1:23,19,26,18,22,11 и запомнить номер первых двух совпавших элементов... ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.09.2012, 19:28     Как сравнить два массива #2
Побайтово, значит представить ваш массив, как массив char
Побитово, значит использовать для сравнения каждого бита в байтах маски.
DiffON
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 6
24.09.2012, 19:57  [ТС]     Как сравнить два массива #3
Цитата Сообщение от go Посмотреть сообщение
Побайтово, значит представить ваш массив, как массив char
Побитово, значит использовать для сравнения каждого бита в байтах маски.
А можно пример какой нибудь если не сложно??

Добавлено через 17 минут
А можно пример какой нибудь если не сложно??
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.09.2012, 20:02     Как сравнить два массива #4
Цитата Сообщение от DiffON Посмотреть сообщение
А можно пример какой нибудь если не сложно??
например, посмотрите на работу функции strcmp(), ее лексикографическре сравнение массивов символов. Вы также можете сравнить два массива лексикографически
DiffON
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 6
24.09.2012, 20:03  [ТС]     Как сравнить два массива #5
Цитата Сообщение от Thinker Посмотреть сообщение
например, посмотрите на работу функции strcmp(), ее лексикографическре сравнение массивов символов. Вы также можете сравнить два массива лексикографически
Спасибо большое вроде нашел!!!
Петррр
5947 / 3384 / 336
Регистрация: 28.10.2010
Сообщений: 5,927
24.09.2012, 20:04     Как сравнить два массива #6
А какого типа изначально массив? И какова цель сравнения?
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.09.2012, 20:06     Как сравнить два массива #7
DiffON,
Цитата Сообщение от go Посмотреть сообщение
Побайтово, значит представить ваш массив, как массив char
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
int arrcmp(char*, char*, size_t, size_t);
 
int main(void)
{
   int arr1[] = { 1, 2, 3, 4, 5 };
   int arr2[] = { 1, 2, 3 };
  
   printf("%d\n%d\n%d\n",
      arrcmp((char *)arr1, (char *)arr2, sizeof arr1, sizeof arr2),
      arrcmp((char *)arr1, (char *)arr1, sizeof arr1, sizeof arr1),
      arrcmp((char *)arr2, (char *)arr1, sizeof arr2, sizeof arr1)  
   );
}   
   
int arrcmp(char *s1, char *s2, size_t size1, size_t size2)
{
   size_t *size = size1 > size2 ? &size2 : &size1;
   return (strncmp(s1, s2, *size) == 0 && size1 != size2) ? (size1 > size2 ?  1 : -1) : strncmp(s1, s2, *size);
}
http://liveworkspace.org/code/f88663...cb309f0e8546e6
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2012, 22:05     Как сравнить два массива
Еще ссылки по теме:

Даны два массива. Найти среднее арифметическое элементов каждого и сравнить эти значения - C++
Даны два массива. Найти среднее арифметическое элементов каждого и сравнить эти значения

Заданы два массива целых чисел одинаковой размерности. Сравнить их соответствующие элементы и вывести - C++
Заданы два массива целых чисел одинаковой размерности. Сравнить их соответствующие элементы и вывести на экран номера элементов, для...

Как сравнить два слова - C++
как сравнить два слова в массиве структур ? // masS.stud=go_23 // // masS.stud=go_23 // ... if(masS.stud==masS.stud) //...

Как сравнить два символа? - C++
Я сегодня пытался решить задачу и столкнулся с проблемой. Мне нужно было сравнить элементы массива с символами. (a==&quot;B&quot;)&amp;&amp;(a==&quot;G&quot;) На...

Сравнить поэлементно два одномерных массива, и через if определить, равны эти элементы или нет - C++
Люди помогите пожалуйста Нужно сравнить по элементам два одномерных массива и через if определить равны эти элементы или нет. If...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DiffON
0 / 0 / 0
Регистрация: 15.09.2012
Сообщений: 6
24.09.2012, 22:05  [ТС]     Как сравнить два массива #8
Цитата Сообщение от Петррр Посмотреть сообщение
А какого типа изначально массив? И какова цель сравнения?
В общем ситуация такая, нужно зашифровать массив с данными по ГОСТ 28147-89 в режиме простой замены, это я сделал, после нужно его сравнить с эталоном, а эталоном является точно такие же данные как и в массиве но зашифрованные с помощью сторонней 100% рабочей программой(например Tantal или Шифровальщик3)... т.е.исходом кода должно быть сравнение выходных зашифрованных данных с помощью моего кода с зашифрованными данными сторонней программы...

Добавлено через 1 минуту
Вот сам код.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#define SEKRETKEY       "98765432109876543210987654321098"
 
#define CRYPT           0
#define DECRYPT         1
 
 
 
int reverse_bit(int X)
{
    return
    X =                            
        ((X & 0x1)          <<31)+((X & 0x2)        <<29)+((X & 0x4)        <<27)+((X & 0x8)        <<25)+
        ((X & 0x10)         <<23)+((X & 0x20)       <<21)+((X & 0x40)       <<19)+((X & 0x80)       <<17)+
        ((X & 0x100)        <<15)+((X & 0x200)      <<13)+((X & 0x400)      <<11)+((X & 0x800)      << 9)+
        ((X & 0x1000)       << 7)+((X & 0x2000)     << 5)+((X & 0x4000)     << 3)+((X & 0x8000)     << 1)+
        ((X & 0x10000)      >> 1)+((X & 0x20000)    >> 3)+((X & 0x40000)    >> 5)+((X & 0x80000)    >> 7)+
        ((X & 0x100000)     >> 9)+((X & 0x200000)   >>11)+((X & 0x400000)   >>13)+((X & 0x800000)   >>15)+
        ((X & 0x1000000)    >>17)+((X & 0x2000000)  >>19)+((X & 0x4000000)  >>21)+((X & 0x8000000)  >>23)+
        ((X & 0x10000000)   >>25)+((X & 0x20000000) >>27)+((X & 0x40000000) >>29)+((X & 0x80000000) >>31);
}
 
int reverse_block(int X)
{
    return
    X =                           
        ((X & 0x1)          << 7)+((X & 0x2)        << 5)+((X & 0x4)        << 3)+((X & 0x8)        << 1)+
        ((X & 0x10)         >> 1)+((X & 0x20)       >> 3)+((X & 0x40)       >> 5)+((X & 0x80)       >> 7)+
        ((X & 0x100)        << 7)+((X & 0x200)      << 5)+((X & 0x400)      << 3)+((X & 0x800)      << 1)+
        ((X & 0x1000)       >> 1)+((X & 0x2000)     >> 3)+((X & 0x4000)     >> 5)+((X & 0x8000)     >> 7)+
        ((X & 0x10000)      << 7)+((X & 0x20000)    << 5)+((X & 0x40000)    << 3)+((X & 0x80000)    << 1)+
        ((X & 0x100000)     >> 1)+((X & 0x200000)   >> 3)+((X & 0x400000)   >> 5)+((X & 0x800000)   >> 7)+
        ((X & 0x1000000)    << 7)+((X & 0x2000000)  << 5)+((X & 0x4000000)  << 3)+((X & 0x8000000)  << 1)+
        ((X & 0x10000000)   >> 1)+((X & 0x20000000) >> 3)+((X & 0x40000000) >> 5)+((X & 0x80000000) >> 7);
}
 
void GOST(short mode, unsigned int MA[], unsigned int OUT[] )
{
int size = 4;
 //unsigned int  MA [4]={234,3434,3343,345};
//  unsigned int  OUT [4]={0};
  unsigned int Fragments[8];
  int i;
  int k;
  unsigned int T; 
  int j;                
 
 
    unsigned int Sbox[8][16] = 
    {
        {4,10,9,2,13,8,0,14,6,11,1,12,7,15,5,3},
        {14,11,4,12,6,13,15,10,2,3,8,1,0,7,5,9},
        {5,8,1,13,10,3,4,2,14,15,12,7,6,0,9,11},
        {7,13,10,1,0,8,9,15,14,4,6,12,11,2,5,3},
        {6,12,7,1,5,15,13,8,4,10,9,14,0,3,11,2},
        {4,11,10,0,7,2,1,13,3,6,8,5,9,12,15,14},
        {13,11,4,1,3,15,5,9,0,10,14,7,6,8,2,12},
        {1,15,13,0,5,7,10,4,9,2,3,14,6,11,8,12}
    };
 
    
    char s[33] = SEKRETKEY;
    unsigned int key[8];
 
 
    for( i= 0; i<8; i++)
    {
        key[i] = (s[4*i]<<24) + (s[1+4*i]<<16) + (s[2+4*i]<<8) + s[3+4*i];  
 
        key[i] = reverse_bit(key[i]);       
    }
 
    
    for (k=0;k<size;k++)
    {
        unsigned int A = 0;                 
        unsigned int B = 0;                
 
 
        A = MA[k];
 
        B = MA[k+1];
        
        A = reverse_block(A);           
        B = reverse_block(B);           
        
        
        
        for(i = 0; i<32; i++)
        {
            T = 0;                  
            if(mode == CRYPT)
            {
                if(i<24) T = (A+key[i%8]) % 0x100000000;    
                else T = (A+key[7-(i%8)]) % 0x100000000;
            }
            if(mode == DECRYPT)
            {
                if(i<8) T = (A+key[i%8])  % 0x100000000;    
                else T = (A+key[7-(i%8)]) % 0x100000000;
            }
 
            Fragments[0] = (T & 0xF0000000)>>28 ;
           Fragments[1] = (T & 0xF000000)>>24;
           Fragments[2] = (T & 0xF00000)>>20    ;
           Fragments[3] =  (T & 0xF0000)>>16,
           Fragments[4] = (T & 0xF000)>>12  ;
           Fragments[5] =(T & 0xF00)>> 8    ;
           Fragments[6] =  (T & 0xF0)>> 4;
            Fragments[7] =   (T & 0xF);
 
 
 
 
            for(j = 0; j<8; j++)
            {
                Fragments[j] = Sbox[j][Fragments[j]];     
            }
 
            T = (Fragments[0]<<28) +        
                (Fragments[1]<<24) +
                (Fragments[2]<<20) +
                (Fragments[3]<<16) +
                (Fragments[4]<<12) +
                (Fragments[5]<< 8) +
                (Fragments[6]<< 4) +
                 Fragments[7];
 
            T = (T<<11)|(T>>21);            
            T ^= B;                         
 
            if(i != 31)
            {
                B = A;                     
                A = T;
            }
            else
            {
                B = T;
            }
        }   
 
        A = reverse_block(A);           
        B = reverse_block(B);           
 
        OUT[k] = A;
        OUT[k+1] = B;
        k=k+1;
        
    }   
    
}
 
 
int main()
{
unsigned int ORIG[4]={123,12312,3123,213};
unsigned int ZASHIFR[4];
unsigned int ITOG[4];
int i;
short FlgCompare = 1;
 
   GOST(CRYPT,ORIG,ZASHIFR);
   GOST(DECRYPT,ZASHIFR,ITOG);
 
   FlgCompare = 1;
 
   for (i=0;i<4;i++)
   {
        if(ORIG[i]!=ITOG[i])
        {
            FlgCompare =0 ;
            break;
        }
   }
 
   if (FlgCompare)
   {
     //Норм
   }
   else
   {
     // Косяк
   }
   return 0;
}
Добавлено через 6 минут
Цитата Сообщение от DiffON Посмотреть сообщение
int main()
{
unsigned int ORIG[4]={123,12312,3123,213};
unsigned int ZASHIFR[4];
unsigned int ITOG[4];
int i;
short FlgCompare = 1;
GOST(CRYPT,ORIG,ZASHIFR);
* *GOST(DECRYPT,ZASHIFR,ITOG);
FlgCompare = 1;
for (i=0;i<4;i++)
* *{
* * * * if(ORIG[i]!=ITOG[i])
* * * * {
* * * * * * FlgCompare =0 ;
* * * * * * break;
* * * * }
* *}
вот так вот можно было сравнить побайтово???
Yandex
Объявления
24.09.2012, 22:05     Как сравнить два массива
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru