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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2010, 20:46   #1
Kirkun
Новичок
Джуниор
 
Регистрация: 29.06.2010
Сообщений: 1
По умолчанию Трудности с пониманием кодa(С)

Данный код шифрует числа от 0 до 9 по такой системе - первый бит слева имеет значение 0, второй 1, третий 2, четвертый 3, пятый 6 - т.е семь к примеру в данном кодировке имеет вид 01001. Т.к тройка может быть представлена двумя спосабами - 01100 и 10010, 01100 соответствует нулю.

Еncode шифрует - array - это цифры которые собственно и шифруются, length - их количество.

Однако логика действий самого кода от меня ускользает. Никто бы на пальцах не мог объяснить? Особенно смысл макро XXBITSET интересует.


Код:
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <limits.h>

 #define XXBITSET(a, i) ((a)[(i) / CHAR_BIT] |= (1 << (CHAR_BIT - 1)) >> ((i) % CHAR_BIT))
 #define XXBITGET(a, i) ((a)[(i) / CHAR_BIT] & (1 << (CHAR_BIT - 1)) >> ((i) % CHAR_BIT))
 unsigned char *Encode(int *array, size_t length)
 {
 size_t bits = 5 * length;
 size_t bytes = bits / 8 + ((bits % 8) ? 1 : 0);

 unsigned char tbl[] = {8+4, 16+8, 16+4, 16+2, 8+2, 4+2, 16+1, 8+1,  4+1, 2+1};


 unsigned char *retval = malloc(bytes);
 for (size_t i = 0; i < bytes; ++i)
 retval[i] = 0;
 size_t bitIndex = 0;
 for (size_t sz = 0; sz < length; ++sz)
 {
  unsigned char b = tbl[array[sz]];
 for (size_t j = 0; j < 5; ++j)
 {
 if (b & (16 >> j))
 XXBITSET(retval, bitIndex);
 bitIndex++;
 }
 }

 return retval;
 }

Последний раз редактировалось Kirkun; 29.06.2010 в 20:49.
Kirkun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# и Java трудности. LaiQue Общие вопросы .NET 0 24.04.2010 15:50
проблема с пониманием map Amadeo Общие вопросы C/C++ 1 08.04.2010 15:01
отнеситесь с пониманием! Belomor Общие вопросы C/C++ 2 15.11.2009 21:53
Трудности перевода Elidan Общие вопросы C/C++ 0 10.06.2009 01:49
Помогите НЕ с решением а С пониманием условия Ozerich Помощь студентам 1 16.12.2008 12:16