Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35

Перевести большой массив char в long long

05.11.2014, 23:23. Показов 5428. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть массив char c 3145360828. Надо его в int перевести.
Пробовал с atoi, вместо int делал long long, не получалось, понял, что atoi возвращает int и с ней, вроде как, не получится вообще.
Попробовал sscanf(myarray, "%d", &i), делая i также long long. Все равно не работает.

Посоветуйте как преобразовать такую штуку?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2014, 23:23
Ответы с готовыми решениями:

Перевести long long unsigned int в массив char
Подскажите, пожалуйста, как превратить число типа long long unsigned int в массив символов? Каждый символ - цифра числа в 16-значной...

Как char[] перевести в битовую маску long long(64 бита) и наоборот?
Как char перевести в битовую маску long long(64 бита) и наоборот?

Преобразование массива char в массив long long
Имеется большой массив char, в котором содержатся числа. Нужно максимально быстро извлечь их и записать в массив чисел long long. ...

14
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
05.11.2014, 23:57
Цитата Сообщение от UWasya Посмотреть сообщение
Пробовал с atoi
Покажите код - скажем что именно у вас не получилось )
0
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
05.11.2014, 23:59
Лучший ответ Сообщение было отмечено UWasya как решение

Решение

atoi и %d внутри работают с Int (32 разряда), так что нет смысла делать переменную long long.

Сделай так на крайняк: сначала преобразуй первую половину, потом вторую. Первое число преобразуй в long long и умножь на 10 в нужной степени, а потом прибавь вторую половину.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
06.11.2014, 00:13
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <sstream>
 
//...
 
string str_num = "3145360828";
long long num;
 
istringstream iss;
iss.str(str_num);
iss >> num;
 
//...
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
06.11.2014, 00:27  [ТС]
Цитата Сообщение от PavelPol Посмотреть сообщение
Сделай так на крайняк: сначала преобразуй первую половину, потом вторую. Первое число преобразуй в long long и умножь на 10 в нужной степени, а потом прибавь вторую половину.
Спасибо. Помогло.

Добавлено через 59 секунд
Цитата Сообщение от IrineK Посмотреть сообщение
Код C++

C++
1
2
3
4
5
6
7
8
#include <sstream>
//...
string str_num = "3145360828";
long long num;
istringstream iss;
iss.str(str_num);
iss >> num;
//...
Спасибо. Но что-то не получилось в данном случае.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
06.11.2014, 00:41
Лучший ответ Сообщение было отмечено UWasya как решение

Решение

***
Миниатюры
Перевести большой массив char в long long  
1
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
06.11.2014, 00:45
Если у вас на входе массив char, то преобразование в string:

C++
1
2
char *ch_num = "3145360828";
string str_num (ch_num);
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
06.11.2014, 01:01  [ТС]
Признаю. Ваша штука работает. Благодарю за упорство в донесении материала. И я понял почему она у меня не работала первый раз.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
06.11.2014, 01:02
Лучший ответ Сообщение было отмечено IrineK как решение

Решение

Назовём это - функция ATOL: строка char в long long

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//----------------------------------------------------------------------------
#include <iostream>
#include <sstream>
//----------------------------------------------------------------------------
long long ATOL (char *ch_num)
{
    std::string str_num (ch_num);
    long long num;
    std::istringstream iss;
    iss.str(str_num);
    if (iss >> num)
        return num; //если строка - число    
 
    return 0;   //если строка - не число
}
//----------------------------------------------------------------------------
int main()
{   
    char *ch_num = "3145360828";
    long long num = ATOL (ch_num);
 
    std::cout << "My number is " << num;
 
    std::cin.get();
    return 0;
}
//-----------------------------------------------------------------------------
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
06.11.2014, 01:09  [ТС]
Вам наверно делать нечего, вот и расписываете мне всё до мелочей
Спасибо.
0
 Аватар для IrineK
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
06.11.2014, 01:10
Цитата Сообщение от UWasya Посмотреть сообщение
Вам наверно делать нечего
Я решаю задачу.
Причем не только вам, а и тем, кто по этой теме зайдет позже.
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
06.11.2014, 01:11
Цитата Сообщение от UWasya Посмотреть сообщение
Но что-то не получилось в данном случае.
А как выводишь на печать? Если printf, то большие числа там не выводятся нормально.
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
06.11.2014, 01:12  [ТС]
Цитата Сообщение от programina Посмотреть сообщение
Если printf, то большие числа там не выводятся нормально.
Это я уже понял.
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
06.11.2014, 01:19
Цитата Сообщение от UWasya Посмотреть сообщение
Это я уже понял
Нужно юзать printf("%lld\n", n);
У меня так работает на GCC
C++
#include <stdio.h>
#include <string.h>
 
long long int pow(int b,int n)
{
    long long int r = 1;
    for(int i = 0; i < n; i++, r *= b);
    return r;
}
 
int main()
{
 
    char c[]            = "3145360828";
    long long int lld   = 0;
    int numc            = strlen(c);
 
    for(int i = numc-1; i > -1; i--)
    {
        lld += (c[numc-i-1]-'0') * pow(10,i);
    }
 
    printf("%lld\n", lld);
    return 0;
}
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
06.11.2014, 01:24
Цитата Сообщение от UWasya Посмотреть сообщение
Есть массив char c 3145360828. Надо его в int перевести.
ну, при 32-х битном инте это никак.
в unsigned int можно так:
C
1
2
3
4
unsigned int i;
i=0;
const char* myarray="3145360828";
sscanf(myarray, "%u", &i);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2014, 01:24
Помогаю со студенческими работами здесь

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p и возвращает ap. Помогите...

Как преобразовать const char * в long в С++, 0xE0E040BF в long
Помогите пожалуйста преобразовать текст в число на C++ const char * value=cmd; long ircode = atol(value); ...

Как преобразовать char[8] к unsigned long long?
Требуется выполнить преобразование char к unsigned long long и обратно

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

Как long перевести в char?
У меня дата и время в формате long пишу так sprintf(buf, &quot;%d&quot;, p); MessageBoxA(NULL, buf, &quot;information&quot;, MB_OK); p это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru