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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2009, 23:02   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию преобразование в цифры

Здравствуйте. Интересует такой вопрос:

По-символьно считываю данные из файла... идут цифры по порядку, 123... если добавлять просто num+=data[x]; получится 1+2+3 ... в результате 6, но не целое число 123... конечно есть идея мудрить с условиями и умножать на 10 или 100, но можно обойтись простой функцией?
Артэс вне форума Ответить с цитированием
Старый 21.11.2009, 23:20   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
atoi(char)
NiCola999 вне форума Ответить с цитированием
Старый 22.11.2009, 01:47   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

спасибо )

У меня проблема... char a[100]; в этом массиве есть так же цифры... например если записать в файл char[1]; будет та цифра, какая там и есть, а если я запишу в переменную int num=char[1]; то уже совершенно другая цифра... пробовал через atoi, ошибку выдает...

Последний раз редактировалось Stilet; 23.11.2009 в 08:26.
Артэс вне форума Ответить с цитированием
Старый 23.11.2009, 00:33   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

atoi в качестве параметра принимает не char, а указатель на строку, терминированную нулём(C-строка)
int num = char[1]; запишет в num аски-код символа, что в char[1].
...
Если Вы уверены, что в char[1] находится цифра и именно она Вам и нужна, то можно её получить в int так:
Код:
 int num = char[1] - 0x30;
в аски таблице коды 0x30-0x39 соответствуют цифрам от 0 до 9, если отнять 0x30, то получаем как раз эту цифру

Последний раз редактировалось netrino; 23.11.2009 в 00:35.
netrino вне форума Ответить с цитированием
Старый 23.11.2009, 01:02   #5
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Спасибо! Получилось! А такой вопрос на засыпку, есть число в шестнадцатеричном виде. Например: А1

Хочу его перевести в десятичное... как сделать примерно, у меня есть идея, но прежде чем мудрить с проверками и т.п, мне интересно, существует ли уже какая-либо готовая функция? Данное число состоит из двух символов... в массиве char[1]; т.е char[0] это А, char[1] это 1... можно это в строку записать, получится А1, а уже из строки переводить в переменную в десятичном виде... или напрямую из массива, или еще какие варианты есть? очень буду рад, если подскажите, и покажите на примере

Последний раз редактировалось Артэс; 23.11.2009 в 01:05.
Артэс вне форума Ответить с цитированием
Старый 23.11.2009, 01:56   #6
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

Код:
int atos (char *trash)
{
	int r,k = 1,t = 0;
	r = strlen (trash);
	r--;
	for ( ; r>=0 ; k *= 16, r--)
	{
		switch (trash[r])
		{
		case '0' : break;
		case '1' : t+=1*k; break;
		case '2' : t+=2*k; break;
		case '3' : t+=3*k; break;
		case '4' : t+=4*k; break;
		case '5' : t+=5*k; break;
		case '6' : t+=6*k; break;
		case '7' : t+=7*k; break;
		case '8' : t+=8*k; break;
		case '9' : t+=9*k; break;
		case 'A' : t+=0xA*k; break;
		case 'B' : t+=0xB*k; break;
		case 'C' : t+=0xC*k; break;
		case 'D' : t+=0xD*k; break;
		case 'E' : t+=0xE*k; break;
		case 'F' : t+=0xF*k; break;
		}
	}
	return t;
}
пояснение...
как мне сказал препод (кажись так), компьютер не понимает шестнадцатеричные циферки и их пришлось хранить в массиве мне (я делал компилятор для ассма)
Olejik вне форума Ответить с цитированием
Старый 23.11.2009, 02:08   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Не припомню, чтобы такая ф-ция была в стандартной библиотеке, тем не менее не сложно написать свою:
Код:
unsigned int hex2int(const char* number)
{
	unsigned int result = 0;
	size_t len = strlen(number)-1;

	if(len >= (sizeof(int)*2))
		return 0;

	for(int i = len, j = 0; i >= 0; i--, j += 4) {
		if(isdigit(number[i])) {
			result |= (number[i] - 0x30) << j;
		} else if('A' <= toupper(number[i]) && toupper(number[i]) <= 'F') {
			result |= (toupper(number[i]) - 'A' + 10) << j;
		}
	}

	return result;
}

...


опоздал )
netrino вне форума Ответить с цитированием
Старый 23.11.2009, 02:16   #8
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Ну в принципе как я и думал, сравнение и умножение на 16 и т.п... но спасибо все равно!
Артэс вне форума Ответить с цитированием
Старый 23.11.2009, 02:30   #9
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Я бы тоже использовал свою ф-цию, но вообще есть strtol.
Код:
	char ch[] = "A1";
	int a = strtol(ch,0,16);
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цифры числа... Mr.Qwerty Паскаль, Turbo Pascal, PascalABC.NET 1 08.09.2009 18:44
Шестнадцатеричные цифры Olejik Общие вопросы C/C++ 4 04.06.2009 22:27
Сортирует цифры по строкам, а надо чтобы сортировала цифры , записанные через пробелы Алексей_xXx Помощь студентам 14 06.05.2009 17:42
Римские цифры Sergeevich Помощь студентам 2 26.05.2008 18:21
Перевёрнутые цифры BETONOMESHALKA Общие вопросы Delphi 2 04.11.2007 15:22