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

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

Войти
Регистрация
Восстановить пароль
 
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
#1

CharToInt - C++

26.02.2014, 00:58. Просмотров 730. Ответов 9
Метки нет (Все метки)

нужно перевести 16ричную строку в тип int
идея - с тем чтоб часть перевести в atoi'ем а при встрече букв case'ом выполнить переход к соответствущими числу, а потом сделать конкатенацию двух переводов - адекватная?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7234 / 5430 / 303
Регистрация: 10.12.2010
Сообщений: 24,128
Записей в блоге: 17
26.02.2014, 01:07 #2
HexToBin()
0
nikolay1982
121 / 121 / 44
Регистрация: 22.01.2014
Сообщений: 379
26.02.2014, 01:13 #3
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
int hex2int(char *str)
{
    char c;
    int s;
    s=0;
    while ((c=*str))
    {
        if (c>='a')
        {
            c-=87;
        }
        else
        {
            if (c>='A')
            {
                c-=55;
            }
            else c-=48;
        }
        s=s*16+(int) c;//mojno s=(s<<4) +(int)c;
        str++;
    }
    return s;
}
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 01:17  [ТС] #4
Avazart, понравилась такая мысля, только что-то не понял как в cpp подключить, еще и пишут, что HextoInt есть...
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
26.02.2014, 02:22 #5
Цитата Сообщение от RayPas Посмотреть сообщение
нужно перевести 16ричную строку в тип int
Все же умеет делать strtol. См последний параметр.
0
Avazart
Эксперт С++
7234 / 5430 / 303
Регистрация: 10.12.2010
Сообщений: 24,128
Записей в блоге: 17
26.02.2014, 03:09 #6

Не по теме:

Цитата Сообщение от RayPas Посмотреть сообщение
Avazart, понравилась такая мысля, только что-то не понял как в cpp подключить, еще и пишут, что HextoInt есть...
Прошу прощение, то что я кинул касается С++Builder



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
#include <iostream>
#include <string>
#include <sstream>
 
 
template<class CharT>
bool hex_str_to_int(const std::basic_string<CharT>& s,int &value)
{
    std::basic_stringstream<CharT> ss(s);
    return ss>>std::hex>>value;
}
 
int main()
{
    int value;
    std::string s="0x0C";
    if(hex_str_to_int(s,value))
        std::cout<<value<<std::endl;
    else
        std::cerr<<"Error convert"<<std::endl;
 
    getchar();
    return 0;
}
1
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
26.02.2014, 12:53  [ТС] #7
DrOffset, вроде не переводит буквы в цифры вернет указатель на тот момент когда прекратит перевод, т.е. я так понял, на первый встретившийся символ отличный от цифры
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
26.02.2014, 13:45 #8
Цитата Сообщение от RayPas Посмотреть сообщение
DrOffset, вроде не переводит буквы в цифры
Да как же так-то? Я же ссылку дал на справку, там же и примеры есть... Откуда хоть такие выводы-то?
16тричные знаки она переводит, если указать нужную систему счисления.

Цитата Сообщение от RayPas Посмотреть сообщение
вернет указатель на тот момент когда прекратит перевод, т.е. я так понял, на первый встретившийся символ отличный от цифры
Вернет, для контроля. А ты знал, что atoi реализована через эту функцию?
0
Avazart
26.02.2014, 15:05
  #9

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
А ты знал, что atoi реализована через эту функцию?
atoi() вообще фиговая функция, ибо число 0 от ошибки конвертирования не отличить.

0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
26.02.2014, 18:04 #10
Цитата Сообщение от Avazart Посмотреть сообщение
atoi() вообще фиговая функция, ибо число 0 от ошибки конвертирования не отличить.

Не по теме:

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

0
26.02.2014, 18:04
Ответ Создать тему
Опции темы

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