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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2009, 10:53   #1
fedrom
 
Регистрация: 16.03.2009
Сообщений: 3
По умолчанию Помогите с переводом HexToBin

Вот мой код по переводу из hex в bin
Код:
char *HexToBin(char Hex[])
{  char Bin[25]="";
   printf(HexToBin(Hex));
   int i = 0;
   while (i<=strlen(Hex))
    {if (i==0){
      if (Hex[i] == '1') strcat(Bin,"1");
      if (Hex[i] == '2') strcat(Bin,"10");
      if (Hex[i] == '3') strcat(Bin,"11");
      if (Hex[i] == '4') strcat(Bin,"100");
      if (Hex[i] == '5') strcat(Bin,"101");
      if (Hex[i] == '6') strcat(Bin,"110");
      if (Hex[i] == '7') strcat(Bin,"111");
      if (Hex[i] == '8') strcat(Bin,"1000");
      if (Hex[i] == '9') strcat(Bin,"1001");
      if ((Hex[i] == 'A')||(Hex[i] == 'a')) strcat(Bin,"1010");
      if ((Hex[i] == 'B')||(Hex[i] == 'b')) strcat(Bin,"1011");
      if ((Hex[i] == 'C')||(Hex[i] == 'c')) strcat(Bin,"1100");
      if ((Hex[i] == 'D')||(Hex[i] == 'd')) strcat(Bin,"1101");
      if ((Hex[i] == 'E')||(Hex[i] == 'e')) strcat(Bin,"1110");
      if ((Hex[i] == 'F')||(Hex[i] == 'f')) strcat(Bin,"1111");}
      else{
      if (Hex[i] == '0') strcat(Bin,"0000");
      if (Hex[i] == '1') strcat(Bin,"0001");
      if (Hex[i] == '2') strcat(Bin,"0010");
      if (Hex[i] == '3') strcat(Bin,"0011");
      if (Hex[i] == '4') strcat(Bin,"0100");
      if (Hex[i] == '5') strcat(Bin,"0101");
      if (Hex[i] == '6') strcat(Bin,"0110");
      if (Hex[i] == '7') strcat(Bin,"0111");
      if (Hex[i] == '8') strcat(Bin,"1000");
      if (Hex[i] == '9') strcat(Bin,"1001");
      if ((Hex[i] == 'A')||(Hex[i] == 'a')) strcat(Bin,"1010");
      if ((Hex[i] == 'B')||(Hex[i] == 'b')) strcat(Bin,"1011");
      if ((Hex[i] == 'C')||(Hex[i] == 'c')) strcat(Bin,"1100");
      if ((Hex[i] == 'D')||(Hex[i] == 'd')) strcat(Bin,"1101");
      if ((Hex[i] == 'E')||(Hex[i] == 'e')) strcat(Bin,"1110");
      if ((Hex[i] == 'F')||(Hex[i] == 'f')) strcat(Bin,"1111");}
      i++;
    }
    printf(HexToBin(Bin));
  //strcat(Bin,'\0');
return Bin;
}
в чем ошибка может кто опытным глазом посмотрит и скажет в чем проблема)

Модератор: тег CODE

Последний раз редактировалось MaTBeu; 17.03.2009 в 01:09.
fedrom вне форума Ответить с цитированием
Старый 16.03.2009, 10:56   #2
fedrom
 
Регистрация: 16.03.2009
Сообщений: 3
По умолчанию

передатеся С-строка в hex формате например "3DА" возращается тоже С-строка "1111011010"
fedrom вне форума Ответить с цитированием
Старый 16.03.2009, 10:57   #3
Bearw08
Boom-boom)
Форумчанин
 
Аватар для Bearw08
 
Регистрация: 02.02.2009
Сообщений: 500
По умолчанию

чтобы посмотреть "опытным" глазом, нужно опытно внести код в тег <code>
¡ʁɔvʎнdǝʚǝdǝu dиw
Bearw08 вне форума Ответить с цитированием
Старый 16.03.2009, 11:00   #4
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Ошибка в говнокоде (в данном случае это именно так).
нафига столько условий??? (при том, что проверятюся ВСЕ, даже если сработает первое, else надо было ставить). нужно использовать switch.
потом. что за рекурсия? почему в HexToBin вызывается printf(HexToBin(Bin)); ???
и потом. ты выделил в функции массив на 25 элементов чар, и при выходе из функции возвращаешь указатель на этот массив! что происходит со статической памятью? правильно, освобождается. возможно конечно, какое то время этот указатель и будет валидным, но не всегда.

пс. на алгоритм я даже и не смотрел
vvviperrr вне форума Ответить с цитированием
Старый 16.03.2009, 11:13   #5
fedrom
 
Регистрация: 16.03.2009
Сообщений: 3
По умолчанию

Спасибо за быстры ответ и критику буду иправлять)
fedrom вне форума Ответить с цитированием
Старый 16.03.2009, 11:31   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

strlen(Hex) еще уберите из условия цикла. Это ж каждую итерацию будет определяться длина неменяющейся С-строки.
if (i == 0) нечего делать в теле цикла. Истинным это выражение будет 1 раз в самом начале, а проверяться будет каждую итерацию.
pu4koff вне форума Ответить с цитированием
Старый 24.01.2015, 16:36   #7
Fixiel
Новичок
Джуниор
 
Регистрация: 24.01.2015
Сообщений: 1
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
strlen(Hex) еще уберите из условия цикла. Это ж каждую итерацию будет определяться длина неменяющейся С-строки.
if (i == 0) нечего делать в теле цикла. Истинным это выражение будет 1 раз в самом начале, а проверяться будет каждую итерацию.
Если не сложно, то напиши как будет выглядеть код представленный выше без недочётов. К примеру я ввожу HEX-код в MaskEdit и вывожу на Label Bin-код.
Fixiel вне форума Ответить с цитированием
Старый 24.01.2015, 17:21   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не знаю что можно сделать с кодом в топе, но могу предложить свой вариант для переводов: http://www.programmersforum.ru/showp...4&postcount=36
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с переводом Pascal на С++ stranger_508 Общие вопросы C/C++ 4 06.03.2009 06:42
Помогите с переводом формулы SYL@R Помощь студентам 1 25.11.2008 08:44
Помогите с переводом формулы SYL@R Помощь студентам 1 25.11.2008 08:37