IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Кодирование символа, C++
zloy_pes
сообщение 25.10.2006 17:27
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 53
Пол: Мужской
Реальное имя: Веселовский Пётр Николаевич

Репутация: -  0  +


Помогите пожалуйста с такой задачей на Си: Вводится символ - нужно закодировать его, инвертировав значения бит на четных позициях (01110010 -> 11011000). Нужно использовать битовые поля.


--------------------
Money, hoes, cars and clothes
That's how all my niggaz know
Blowin dro, 24's
That's how all my niggaz roll...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 1)
volvo
сообщение 25.10.2006 18:36
Сообщение #2


Гость






Извращение страшное, но работает (битовые поля тоже присутствуют)...
Тестировалось на Turbo C, возможно на других компиляторах не пойдет (я не знаю, насколько переносима "склейка" - она же ##)

#include <conio.h>
#include <stdio.h>

#define bit_number(x) _##x
#define invert(x) (Cvt.bits.bit_number(x))=(!(Cvt.bits.bit_number(x)));

typedef struct _BitField {
  unsigned int _0:1;
  unsigned int _1:1;
  unsigned int _2:1;
  unsigned int _3:1;
  unsigned int _4:1;
  unsigned int _5:1;
  unsigned int _6:1;
  unsigned int _7:1;
} BitField;

typedef union _Convert {
  BitField bits;
  char ch;
} Convert;

int main() {
  char s[10];
  Convert Cvt;

  Cvt.ch = getch();
  printf("init value = %c(%d)\n", Cvt.ch, Cvt.ch);
  /* Cvt.ch = (char)114; */
  invert(1);
  invert(3);
  invert(5);
  invert(7);

  printf("encoded value = %c(%d)\n", Cvt.ch, (((int)Cvt.ch) & 0xFF));
  return 0;

}
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 27.07.2025 12:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"