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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 14:27   #1
DiZbot
 
Регистрация: 29.05.2011
Сообщений: 6
По умолчанию ASCII to BIN и обратно

Здравствуйте, уважаемы форумчане!
Требуется перевести ASCII в BIN и обратно. Написал...
Функции по отдельности работают нормально, но вместе выдают бред.

Я думаю, что неправильно возвращаю массив из функции... и передаю в следующую тоже наверно не так)))

Что я делаю не так?!

Код:
#include <stdio.h>
#include <string.h>

int i,j;
int power(int t, int k) { // быстрое возведение t в степень k(понадобится позже)
  int res = 1;
  while (k) {
        if (k & 1) res *= t;
        t *= t;
        k >>= 1;
  }
  return res;
}

char ascii_to_bin(int x){
char bin[8];
int j=0;
int i;
for (i=1;i<9;i++) {
	if ((x | (1<<8-i)) == x){
	bin[j]='1';} else {
	bin[j]='0';};
	j++;
}
return bin;
}


char bin_to_ascii(char bin[]){
int z=0;
j=7;
for (i=0;i<8;i++){
char a = bin[i];
	if (a=='1'){
		z=z+power(2,j);
	}
j--;
}
return z;
}

int main() {
char q = 'A';
int i,j,n;
char bin=ascii_to_bin(q);
for (n=0;n<8;n++){
printf("%c",bin[n]);
}
printf("\n%c",bin_to_ascii(bin));
return 0;
}
DiZbot вне форума Ответить с цитированием
Старый 29.05.2011, 14:41   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

функция ascii_to_bin должна возвращать массив, а точнее указатель на этот массив, а у Вас она возвращает char
Код:
char *ascii_to_bin(int x){...
Код:
char *bin=ascii_to_bin(q);
внутренностей функции ascii_to_bin вообще не понял, переписал
Код:
char *ascii_to_bin(char x){
char *bin=new char[8];
int i;
for (i=0;i<8;i++) {
	if ((x & (1<<i))){
	bin[i]='1';} else {
	bin[i]='0';};
}
return bin;
}
bin_to_ascii можно быстрее, тоже подправил
Код:
char bin_to_ascii(char *bin){
char z=0;
int b=1;
for (i=0;i<8;i++){
	if (bin[i]=='1'){
		z=z+b;
	}
    b<<=1;
}
return z;
}
да, еще, непонятно зачем вы объявили i,j глобально?)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 29.05.2011, 17:15   #3
DiZbot
 
Регистрация: 29.05.2011
Сообщений: 6
По умолчанию

Да, наговнокодил я))) не спал давно... запутался окончательно)

Granus, спасибо вам большое!)
DiZbot вне форума Ответить с цитированием
Старый 29.05.2011, 21:24   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

да не за что
а вот возведение в степень очень порадовало, честно говоря)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сайт на CGI-bin russian-stalker Общие вопросы C/C++ 1 05.11.2010 09:57
'C:\Program Files\Borland\Delphi\Bin\delphi32.$ $$' to 'C:\Program Files\Borland\Delphi\Bin\delphi32.d ro' tonatas Общие вопросы Delphi 2 21.09.2010 08:26
Файл Bin Syltan Свободное общение 15 20.05.2010 17:48
Очень нужна помощь в переводе символов в ASCII и обратно !!!~VivO~!!! Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2008 10:47
как перевести из integer в real(и обратно), и из real в string(и обратно) Ga-sergey Общие вопросы Delphi 2 08.06.2007 21:13