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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 00:35   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию перевод строки в long long и обратно

добрый день, подскажите, пожалуйста, функции перевода из Str в long long и наоборот
Dimarik вне форума Ответить с цитированием
Старый 13.09.2009, 01:47   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
long long int StrToLongLong(const char* str)
{
	long long int ret = 0;
	long long int mul = 1;
	int len = strlen(str);
	int i = 0, j = 0;
	bool neg = false;

	if(str[i] == '-') {
		neg = true;
		i++;
	} else if(str[i] == '+')
		i++;

	while( i < len ) {
		ret += (str[len - j - 1] - 0x30) * mul;
		mul *= 10;
		i++; j++;
	}

	if(neg)
		ret = -ret; 

	return ret;
}

const char* LongLongToStr(long long int number)
{
	char* retstr = new char[30]; // должно хватить :)
	char temp[30];
	bool neg = false;

	int i = 0, j = 0;

	if(number < 0) {
		neg = true;
		number = -number;
	}

	while( number > 10 ) {
		temp[i] = number%10 + 0x30;
		number /= 10;
		i++;
	}

	temp[i] = number + 0x30;

	if(neg) {
		retstr[j] = '-';
		j++;
	}

	while(i >= 0) {
		retstr[j] = temp[i];
		j++; i--;
	}

	retstr[j] = 0;

	return retstr;
}
вот на C++, реализация может не очень, но работает =)

Последний раз редактировалось netrino; 13.09.2009 в 02:21.
netrino вне форума Ответить с цитированием
Старый 13.09.2009, 02:35   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

ппц. а попроще никак?
P.S. всех с днём программиста
Dimarik вне форума Ответить с цитированием
Старый 13.09.2009, 02:46   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Есть функции _atoi64 и _i64toa. Должны работать как минимум в MSVC и MinGW.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.09.2009, 09:33   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

extern PACKAGE AnsiString __fastcall IntToStr(__int64 Value);
extern PACKAGE __int64 __fastcall StrToInt64(const AnsiString S);

__int64 эквивалентно long long
pu4koff вне форума Ответить с цитированием
Старый 15.09.2009, 21:25   #6
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

это с++ Билдер 6
Dimarik вне форума Ответить с цитированием
Старый 15.09.2009, 21:46   #7
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Проще заюзать boost::lexical_cast
Код:
#include <iostream>
#include <numeric>
#include <string>
#include <boost/lexical_cast.hpp>
int main()
{
	long long ll = boost::lexical_cast<long long>("9223372036854775807");
	std::cout << ll << std::endl;

	std::string s = boost::lexical_cast<std::string>(ll);
	std::cout << s << std::endl;
	return 0; 
}
Результат
Цитата:
9223372036854775807
9223372036854775807
Press any key to continue . . .
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 15.09.2009, 21:49   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от ISergeyN Посмотреть сообщение
Проще заюзать boost::lexical_cast
Фигасе проще... Буст прикрутить еще нужно для этого, а тут вроде как всё родное и ни с чем париться не нужно
pu4koff вне форума Ответить с цитированием
Старый 16.09.2009, 02:52   #9
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Фигасе проще... Буст прикрутить еще нужно для этого
Ну кому как.. ладно можно крыво но..

Код:
#include <iostream>
#include <numeric>
#include <string>
#include <sstream>

template< typename T, typename U>
inline T my_cast( const U& rhs ){
	return static_cast<T> (rhs);
}

// здесь кака
template< typename U >
inline std::string my_cast( const U& rhs ){
	std::stringstream buff;
	buff << rhs;
	return buff.str();
}
//-----------------------------------------

template< typename T >
inline T my_cast( const char *rhs ){
	//code netrino http://www.programmersforum.ru/member.php?u=19083
	T ret = 0;
	T mul = 1;
	size_t len = strlen(rhs);
	size_t i = 0, j = 0;
	bool neg = false;

	if(rhs[i] == '-') {
		neg = true;
		i++;
	} else if(rhs[i] == '+')
		i++;

	while( i < len ) {
		ret += (rhs[len - j - 1] - 0x30) * mul;
		mul *= 10;
		i++; j++;
	}

	if(neg)
		ret = -ret; 

	return ret;
}
//.................................................
int main()
{
	int x = my_cast<int>('b');
	std::cout << x << std::endl;
//----------и это--------------------
	std::string s = my_cast(1123);
	std::cout << s << std::endl;
//-----------------------------------
	long long  y = my_cast<long long>("9223372036854775807");
	std::cout << y << std::endl;

	return 0; 
}
в общем пример плохой...
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....

Последний раз редактировалось ISergeyN; 16.09.2009 в 03:10.
ISergeyN вне форума Ответить с цитированием
Старый 16.09.2009, 13:27   #10
LaptevVV
Пользователь
 
Регистрация: 15.08.2009
Сообщений: 37
По умолчанию

Нормальный пример - строковые потоки использутся. Стандартные.
LaptevVV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из строки в число и обратно AsmBeginer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 22.05.2010 18:49
Нужен тип чисел больший за long, что делать? Flex Общие вопросы Delphi 23 05.06.2009 23:37
помогите отобразить тип LONG в DBMemo funball БД в Delphi 13 17.04.2009 11:46
Long file name (LFN) Liquor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 29.03.2009 17:10