Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Ghostman23
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 44
#1

Char* в число по ASCII кодам - C++

18.01.2015, 12:57. Просмотров 1160. Ответов 31
Метки нет (Все метки)

Здравствуйте!
Подскажите, пожалуйста, есть ли какой то быстрый способ перевести char* в число по ASCII кодам
Например у меня есть:
C++
1
char* text = "text";
Количество значений в переменной text я знаю заранее. Если это что то изменит то переменная может быть объявлена по другому - string, char[].
И мне нужно получить из этой переменной число. Что то вроде 1952807028.
Я делал через string и for'ом перебирал весь массив и делал сдвиги вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
long long ASCIIStringToNum(string s)
{
    int lenStr = s.length();
    long long num = 0;
    for (int i = 0; i < lenStr; i++)
    {
        unsigned char c = s[i];
        num <<= 8;
        num += c;
    }
    return num;
}
Но это выполняется очень долго. Может кто-нибудь знает более быстрый способ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2015, 12:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Char* в число по ASCII кодам (C++):

ASCII, char - C++
Подходит ли для определений символов типа char таблица http://www.asciitable.com/ ? Код 232 по этой таблице определяется как Ф, но на...

масив Char (Windows-1251, ASCII, UTF-8) - C++
Перехожу с мелкомяхких на linux (с Delphi на С++), так как все мои программы занимаются обработкой строк то решил сначала разобраться со...

Зашифровать строку Char, заменив каждый символ на его ASCII код - C++
Собственное весь вопрос в заголовке темы. Вся задача. Весь код. Текущие функции кодирование декодирования не устраивают,...

Необходимо записать в пустую строку число (ASCII код) - C++
Следующая программа должна во введенной строке заменять все согласные буквы на гласные (это мне удалось реализовать) , а вместе гласный...

Как получить число в текстовом десятичном виде (!) в кодировке ASCII? - C++
ответ к задаче мне надо представить в файле .txt. Ответ должен представлять не отрицательное число в текстовом десятичном виде в кодировке...

Как в выделенную память записать поочередно число int, массив char[n], и еще число int - C++
Выделяю память void* Start=malloc(Size); Как туда записать поочередно число int, массив char, и еще число int?

31
kaznachei67
27 / 27 / 10
Регистрация: 17.03.2014
Сообщений: 102
18.01.2015, 13:20 #2
Попробуйте так:
C++
1
2
3
4
    string s = "Text";
    int a = 0;
    for (int i = 0; i < s.length(); i++)
        a += static_cast<int>(s.at(i));
0
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
18.01.2015, 13:31 #3
Цитата Сообщение от Ghostman23 Посмотреть сообщение
C++
1
2
num <<= 8;
 num += c;
Если в строке что-то типа "123" то это неверно. Надо
C++
1
num*=10; num+=c-'0';
0
Ghostman23
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 44
18.01.2015, 13:35  [ТС] #4
Это да, но у меня может быть любой текст в строке.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
18.01.2015, 13:38 #5
Цитата Сообщение от Ghostman23 Посмотреть сообщение
Но это выполняется очень долго.
Ты на калькуляторе эти действия выполняешь?
0
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
18.01.2015, 13:39 #6
Цитата Сообщение от Ghostman23 Посмотреть сообщение
по ASCII кодам
Какой смысл ТС вкладывает в "ASCII-код" (имхо, он сам не знает, чего хочет)

Цитата Сообщение от castaway Посмотреть сообщение
Ты на калькуляторе эти действия выполняешь?
Интересно, что это за задача, где перевод строки в число выполняется долго . Обычно сам перевод - малая доля времени от решения всей задачи.
0
Ghostman23
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 44
18.01.2015, 13:45  [ТС] #7
Цитата Сообщение от castaway Посмотреть сообщение
Ты на калькуляторе эти действия выполняешь?
Цитата Сообщение от zer0mail Посмотреть сообщение
Интересно, что это за задача, где перевод строки в число выполняется долго . Обычно сам перевод - малая доля времени от решения всей задачи.
Мне важна каждая миллисекунда, а как раз на этом переводе теряется много времени.

Добавлено через 2 минуты
Цитата Сообщение от zer0mail Посмотреть сообщение
Какой смысл ТС вкладывает в "ASCII-код" (имхо, он сам не знает, чего хочет)
А что есть несколько смыслов? Код символа вот и весь смысл.
0
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
18.01.2015, 13:48 #8
1. миллисекунда важна, а правильность - нет?
2. пиши на ассеблере
3. все-таки - что это за задача ?

Добавлено через 1 минуту
Цитата Сообщение от Ghostman23 Посмотреть сообщение
А что есть несколько смыслов? Код символа вот и весь смысл.
Я уже писал, что в этом случае сдвиг и суммирование неправильны, но вы начали оспаривать и написали "по ASCII кодам"
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
18.01.2015, 13:50 #9
Если бы ты сказал для чего это нужно, тогда возможно можно было бы придумать что-нибудь быстрее.
0
Ghostman23
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 44
18.01.2015, 13:57  [ТС] #10
Цитата Сообщение от zer0mail Посмотреть сообщение
1. миллисекунда важна, а правильность - нет?
2. пиши на ассеблере
3. все-таки - что это за задача ?
1.В чём не правильность?
2. Ассемблера не знаю, и как то пока не хочу изучать.
3. Задача такая: пользователь вводит строку или происходит двоичное считывание из файла в строковую переменную. Затем эту переменную мне надо получить как число и провести с ним некоторое преобразование(шифрование) и записать двоично в файл.
Не обязательно получение всей переменной как числа, а например по 64-бит(8 символов).

Добавлено через 6 минут
Цитата Сообщение от zer0mail Посмотреть сообщение
Я уже писал, что в этом случае сдвиг и суммирование неправильны, но вы начали оспаривать и написали "по ASCII кодам"
В чём именно не правильность? Я не понимаю.
Вы написали только то что если в строке будет "123", то это не правильно. А как тогда правильно? Если у меня может быть "123", а может быть "some text".
0
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
18.01.2015, 14:01 #11
Цитата Сообщение от Ghostman23 Посмотреть сообщение
В чём именно не правильность? Я не понимаю.
Неправильность в том, что если числа в ASCII-кодах, то сдвиг+суммирование не подходят. А если это просто байты (и сдвиг подходит), то фраза "число по ASCII кодам" бессмысленна (ASCII коды тут не при чем).
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
18.01.2015, 14:07 #12
Цитата Сообщение от Ghostman23 Посмотреть сообщение
Задача такая: пользователь вводит строку или происходит двоичное считывание из файла в строковую переменную. Затем эту переменную мне надо получить как число и провести с ним некоторое преобразование(шифрование) и записать двоично в файл.
Зачем тут строка? Читай сразу в переменную!
C++
1
2
    long long value;
    fread( &value, sizeof( value ), 1, fp );
А лучше большими кусками в массив переменных.
0
Ghostman23
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 44
18.01.2015, 14:13  [ТС] #13
Цитата Сообщение от zer0mail Посмотреть сообщение
Неправильность в том, что если числа в ASCII-кодах, то сдвиг+суммирование не подходят. А если это просто байты (и сдвиг подходит), то фраза "число по ASCII кодам" бессмысленна (ASCII коды тут не при чем).
C++
1
2
char c = 'a';
cout << (int)c;
Я получаю ASCII код символа 'a' или я не прав?

Добавлено через 4 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Зачем тут строка? Читай сразу в переменную!
А как мне в этом случае контролировать сколько бит записывается в число? Допустим если мне надо считывать по 32-бита(Шифрование 32-битное).
0
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
18.01.2015, 14:17 #14
Вижу, у вас проблемы с тем, чтобы
1. Заголовок темы соответствовал ее содержанию
2. Содержание ясно описывало решаемую задачу (даже за 14 сообщений это не достигнуто)
3. char c = 'a'; cout << (int)c; получает ASCII код, но
char c = 'я'; cout << (int)c; получает не ASCII код.

Честно говоря, мне уже неинтересно (лимит исчерпан, так сказать).
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
18.01.2015, 14:19 #15
Цитата Сообщение от Ghostman23 Посмотреть сообщение
А как мне в этом случае контролировать сколько бит записывается в число?
C++
1
2
    uint32_t value;
    fread( &value, sizeof( value ), 1, fp );
Тип uint32_t всегда имеет размер 32 бита.
0
18.01.2015, 14:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2015, 14:19
Привет! Вот еще темы с ответами:

С помощью оператора if вывести заданное число, а под ним ASCII код по 16 в строку - C++
Задача: С помощью оператора if вывести заданное число, а под ним ASCII код по 16 в строку. Символы вывел, а как над ними вывести...

char в число - C++
как можно перевести char A={0x1A, 0x1B, 0x1C, 0x1D} в hex число 0x1A1B1C1D?

Rand число в char - C++
Доброго времени суток. Ребята, очень нужна ваша подсказка... мне надо записать в файл рандомные числа (с диапазоном) через rand(). я...

Вписать в массив char число - C++
Собственно как вписать в массив char число и потом как вывести это число с помощью массива?


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru