- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
int i,j;
char alph[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//Подстановка по таблице 1
int S_there[26][8]={{1,0,0,1,1,0,0,1},{1,0,0,0,1,0,0,0},{1,0,1,0,1,0,1,0},{0,0,1,1,0,0,1,1},{1,1,1,0,0,0,0,1},
{1,0,0,0,0,1,1,1},{1,1,1,1,1,1,1,1},{1,1,0,1,0,0,1,0},{0,1,1,1,1,0,0,0},{1,1,0,0,0,0,1,1},{1,0,1,0,0,1,0,1},{0,1,0,0,1,0,1,1},
{0,0,0,1,1,1,1,0},{0,1,0,1,0,1,0,1},{1,1,0,0,1,1,0,0},{0,0,0,1,0,0,0,1},{1,1,0,1,1,1,0,1},{1,0,1,1,0,1,0,0},{0,0,1,0,1,1,0,1},
{0,0,0,0,0,0,0,0},{0,1,1,0,0,1,1,0},{0,1,0,0,0,1,0,0},{1,1,1,1,0,0,0,0},{0,0,1,1,1,1,0,0},{0,1,1,0,1,0,0,1},{0,0,1,0,0,0,1,0}};
char str[]="THIISATESTFILEFORCHECKINGCYPHERMODULE";
int len=strlen(str);
int num[len];//массив с порядковыми номерами
int vector[len][8];//массив с ОТ, переведённым в двоичные вектора длины 8
for (i=0; i< len; i++)//Присваиваем каждой букве порядковый номер (а=0,b=1 и т.д.)
{
num[i]=((strchr(alph, str[i])-alph)% 26 + 0x01);
num[i]--;
}
for (i=0; i<len; i++)//Меняем букву на двоичный вектор длины 8 согласно порядковому номеру
{
int number=num[i];//счётчик текста
for (j=0; j<8; j++)
{
vector[i][j]=S_there[number][j];
}
}
for (i=0; i<len; i++)//Вывод на экран ОТ
{
for (j=0; j<8; j++)
{
printf("%u",vector[i][j]);
}
printf(" %c\n",str[i]);
}
Нашёл в своей очень старой лабе...Нужно было буквы на входе преобразовать в двоичные вектора (например, а=10011001, b=10001000 и т.д.) ну и дальше ковыряться с этими векторами...почему я категорически не захотел тогда использовать case - хз :)))
guest 30.03.2012 08:56 # 0
char letter = 'a';
int i;
for ( i = 0; i < 8; i++ ) {
vect[7 - i] = a & ( 1 << i ) ? 1 : 0;
}
Steex 03.04.2012 21:47 # 0
vect[7 - i] = (a >> i) & 1;
guest8 09.04.2019 12:57 # −999