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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2014, 23:27   #1
ChronoArt
Новичок
Джуниор
 
Регистрация: 10.11.2014
Сообщений: 6
По умолчанию Перевод char в long и обратно! Начинающий уровень

Написать функцию для перевода переменной типа long в символьную строку в двоичном представлении ( ltoab( long num, char s[]) ) и тестирующую программу к ней и функцию для обратного перевода(т.е. из полученного символьного массива получить число типа Long обратно)

я сделал первую часть задания, а теперь не очень понимаю, как сделать обратную функцию
Код:
#include <stdio.h>
 
void conv(long n, char string[32]) {
int c, k, i, y, cnt;
y = 0; cnt = 0;
char result[32];
for (c = 31, i = 0; c >= 0; c--, i++) {
k = n » c;
if (k & 1) string[i] = '1'; else string[i] = '0';
}
string[31] = '\0';
for (i = 0; i<32; i++) {
if (y == 0) {
for (;;) {
if (string[i] == '0') { i++; }
else { y = 1; break; }
}
}
result[cnt] = string[i]; cnt++;
}
result[cnt] = '\0';
printf("%s\n", result);
}
int main() {
char string[32];
long number;
printf("Enter number: "); scanf_s("%d", &number);
conv(number, string);
return 0;
}
насколько понимаю, это можно сделать с помощью
Код:
do r = r*2 + *p - '0' while (*p++);
только у меня не получается вставить эту функцию в программу((
обязательно в Си!
ChronoArt вне форума Ответить с цитированием
Старый 11.11.2014, 07:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Могу я посоветовать конвертер СС?:http://www.programmersforum.ru/showp...4&postcount=36
Двоичной я его не гонял, но работать должно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2014, 19:38   #3
ChronoArt
Новичок
Джуниор
 
Регистрация: 10.11.2014
Сообщений: 6
По умолчанию

не, мне нужно именно к этой программе написать обратный конвертер, тема все еще актуальна
ChronoArt вне форума Ответить с цитированием
Старый 12.11.2014, 07:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Помимо того что тебе написали в кроссовой теме выкладываю свое:
Код:
int conv2(char *s){
 int i,res=0;
 for(i=0;s[i];i++) {res=s[i]=='1'; res=res<<1;}
 return res;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2014, 19:53   #5
ChronoArt
Новичок
Джуниор
 
Регистрация: 10.11.2014
Сообщений: 6
По умолчанию

этот код не выводит никакого значения

Цитата:
Сообщение от Stilet Посмотреть сообщение
Помимо того что тебе написали в кроссовой теме выкладываю свое:
Код:
int conv2(char *s){
 int i,res=0;
 for(i=0;s[i];i++) {res=s[i]=='1'; res=res<<1;}
 return res;
}
если его вставить в программу, ничего не происходит, может, нужно вывести значение?

Последний раз редактировалось Stilet; 12.11.2014 в 20:52.
ChronoArt вне форума Ответить с цитированием
Старый 12.11.2014, 20:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хе )))
Код:
printf("%d",conv2(&string));
Ленивые нонче студенты пошли )
В советские времена не так учили...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2014, 21:30   #7
ChronoArt
Новичок
Джуниор
 
Регистрация: 10.11.2014
Сообщений: 6
По умолчанию

Если вставляю твою функцию в программу, то все равно ничего не происходит... кроме того, что уже было раньше.

Код:
#include <stdio.h>
 
void conv(long n, char string[32]) {
int c, k, i, y, cnt;
y = 0; cnt = 0;
char result[32];
for (c = 31, i = 0; c >= 0; c--, i++) {
k = n » c;
if (k & 1) string[i] = '1'; else string[i] = '0';
}
string[31] = '\0';
for (i = 0; i<32; i++) {
if (y == 0) {
for (;;) {
if (string[i] == '0') { i++; }
else { y = 1; break; }
}
}
result[cnt] = string[i]; cnt++;
}
result[cnt] = '\0';
printf("%s\n", result);
}
int main() {
char string[32];
long number;
printf("Enter number: "); scanf_s("%d", &number);
conv(number, string);
return 0;
}
int conv2(char *s){
 int i,res=0;
 for(i=0;s[i];i++) {res=s[i]=='1'; res=res<<1;}
 return res;
printf("%d",conv2(&string));
}
кроме того ругается, что string не определен в последней строчке
ChronoArt вне форума Ответить с цитированием
Старый 12.11.2014, 21:49   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я правильно понимаю - Автор приведенного кода в топе темы не ты?
Код:
#include <stdio.h>
#include <stdio.h>



int conv2(char *s){
 int i,res=0;
 for(i=0;s[i];i++) {res=s[i]=='1'; res=res<<1;}
 return res;
}
 
void conv(long n, char string[32]) {
int c, k, i, y, cnt;
y = 0; cnt = 0;
char result[32];
for (c = 31, i = 0; c >= 0; c--, i++) {
k = n » c;
if (k & 1) string[i] = '1'; else string[i] = '0';
}
string[31] = '\0';
for (i = 0; i<32; i++) {
if (y == 0) {
for (;;) {
if (string[i] == '0') { i++; }
else { y = 1; break; }
}
}
result[cnt] = string[i]; cnt++;
}
result[cnt] = '\0';
printf("%s\n", result);
}


int main() {
char string[32];
long number;
printf("Enter number: "); scanf_s("%d", &number);
conv(number, string);printf("%d",conv2(&string));
return 0;
}
И еще кое-что. Задержку консоли для просмотра результата поставишь самостоятельно )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2014, 22:27   #9
ChronoArt
Новичок
Джуниор
 
Регистрация: 10.11.2014
Сообщений: 6
По умолчанию

Код:
printf("%d",conv2(&string));
вот в этом месте ругается на &string (аргумент с параметром типа char(*)[32] не совместим с параметром типа char*

задержку сделал))

тема еще актуальна!

Последний раз редактировалось Stilet; 13.11.2014 в 20:27.
ChronoArt вне форума Ответить с цитированием
Старый 13.11.2014, 17:20   #10
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Цитата:
вот в этом месте ругается на &string (аргумент с параметром типа char(*)[32] не совместим с параметром типа char*

задержку сделал))
Ты передаешь адрес на массив символов, а у тебя просят указатель.
300 лет не писал на C, но примеры ниже должны работать.

Код:
int _tmain(int argc, _TCHAR* argv[])
{
 char string[100] = {0};
 char *pString;
 pString = string;
 scanf_s("%s", pString);
 printf_s("%s", pString);
 return 0;
}
или

Код:
int _tmain(int argc, _TCHAR* argv[])
{
 char string[100] = {0};
 scanf_s("%s", &string[0]);
 printf_s("%s", string);
 return 0;
}
или

Код:
int _tmain(int argc, _TCHAR* argv[])
{
 char string[100] = {0};
 scanf_s("%s", string);
 printf_s("%s", string);
 return 0;
}

Последний раз редактировалось coNsept; 13.11.2014 в 17:45.
coNsept вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов (работа с матрицей в шаблонном классе) Начинающий уровень Ostor Общие вопросы C/C++ 2 11.11.2014 19:06
Передать из массива char в переменную long? ATAMAN200 Общие вопросы C/C++ 2 05.03.2013 18:50
String в array of Char и обратно. _PROGRAMM_ Общие вопросы Delphi 4 22.11.2011 22:10
перевод строки в long long и обратно Dimarik Общие вопросы C/C++ 9 16.09.2009 13:27