Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Функции стандартной библиотеки для отображения одной системы счисления в другую - C++

02.12.2012, 00:30. Просмотров 1631. Ответов 19
Метки нет (Все метки)

Вопрос заключается в том, существует ли в стандартной библиотеки функции типа atoi(), но для 2-8-16 ричной системы? И наоборот, которые преобразовывают значение 2-8-16 ричной системы в соответствующую строку символов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 00:30     Функции стандартной библиотеки для отображения одной системы счисления в другую
Посмотрите здесь:
C++ Программа для перевода из одной системы счисления в другую.
Программа для перевода числа из одной системы счисления в другую C++
C++ Перевод из одной системы счисления в другую
Перевод из одной системы счисления в другую C++
Перевод из одной системы счисления в другую C++
C++ Перевод из одной системы счисления в другую
C++ Перевод из одной системы счисления в другую.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 00:38     Функции стандартной библиотеки для отображения одной системы счисления в другую #2
C++
1
itoa(int value,char *dest,int radix);
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 00:40  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #3
В манах нарыл только для работы с десятичной системой atof(), afol(), strtol(), strtoul(), strtold() ...
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 00:43     Функции стандартной библиотеки для отображения одной системы счисления в другую #4
Цитата Сообщение от xtorne21st Посмотреть сообщение
В манах нарыл только для работы с десятичной системой atof(), afol(), strtol(), strtoul(), strtold() ...
Это перевод из строки в число. В памяти это все равно будет храниться как двоично число.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 00:46  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #5
А обратная конвертационная функция существует?
и что-то не нахожу у себя itoa():
Bash
1
2
ilyuha21st@coldshoot currents]$ man itoa
No manual entry for itoa
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 00:53     Функции стандартной библиотеки для отображения одной системы счисления в другую #6
C++
1
#include <cstdlib>
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 00:57  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #7
При всём уважении к вам, но что означает это?
Цитата Сообщение от Croessmah Посмотреть сообщение
1
#include <cstdlib>
Вопрос, ответ, что?
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 01:00     Функции стандартной библиотеки для отображения одной системы счисления в другую #8
подключите заголовок <cstdlib> в нем "лежит прототип" функции itoa

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstdlib>
 
int main(){
    char f[100];
    itoa(255,f,16);
    std::cout<<f;
    std::cin.get();
    return 0;
}
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
02.12.2012, 01:01     Функции стандартной библиотеки для отображения одной системы счисления в другую #9
Croessmah, это не стандартная функция, так что ее может попросту не быть.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 01:03  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #10
Bash
1
2
3
4
5
[ilyuha21st@coldshoot currents]$ cat /usr/include/stdlib.h | grep atoi
extern int atoi (__const char *__nptr)
__NTH (atoi (__const char *__nptr))
[ilyuha21st@coldshoot currents]$ cat /usr/include/stdlib.h | grep itoa
[ilyuha21st@coldshoot currents]$
Нет такой функции в gcc
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 01:03     Функции стандартной библиотеки для отображения одной системы счисления в другую #11
Цитата Сообщение от Toshkarik Посмотреть сообщение
Croessmah, это не стандартная функция, так что ее может попросту не быть.
в GCC и студии имеется
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 01:04     Функции стандартной библиотеки для отображения одной системы счисления в другую #12
Цитата Сообщение от xtorne21st Посмотреть сообщение
Нет такой функции в gcc
Название: Безымянный.jpg
Просмотров: 144

Размер: 6.8 Кб
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 01:04  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #13
Я понимаю, что особого труда их составить нету, но мне интересно предусмотрено стандартом данные функции?
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 01:06     Функции стандартной библиотеки для отображения одной системы счисления в другую #14
Хотя, может оно и не переносимо...
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 01:11  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #15
Цитата Сообщение от Croessmah Посмотреть сообщение
в GCC и студии имеется
Я не в курсе, как реализован gcc под windows, но уверяю вас у меня в системе в stdlib.h напрочь отсутствует itoa.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
02.12.2012, 01:22     Функции стандартной библиотеки для отображения одной системы счисления в другую #16
xtorne21st, stdlib.h может включать и другие заголовки, в которых может находится прототип этой функции.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 01:26     Функции стандартной библиотеки для отображения одной системы счисления в другую #17
Цитата Сообщение от Toshkarik Посмотреть сообщение
xtorne21st, stdlib.h может включать и другие заголовки, в которых может находится прототип этой функции.
Врядли. Если я не ошибаюсь, то в Линуксе нет такой функции
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 01:39  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #18
Я прогуглил, да действительно, нет такой функции в gcc на линуксе.

Добавлено через 2 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
xtorne21st, stdlib.h может включать и другие заголовки, в которых может находится прототип этой функции.
а про это я и забыл.

осталось выяснить, есть ли в стандарте аналог... )) Или придётся писать свои...
Иногда просто очень интересно, чему равняется скажем, 4532 в двоичной системе...
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.12.2012, 01:47     Функции стандартной библиотеки для отображения одной системы счисления в другую #19
Цитата Сообщение от xtorne21st Посмотреть сообщение
Или придётся писать свои...
Можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <sstream> 
using namespace std; 
int main(){
    int  num   = 255;
    ostringstream out;
    std::hex(out);
    out<<num;
    cout << out.str() << endl;
    cin.get();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 22:15     Функции стандартной библиотеки для отображения одной системы счисления в другую
Еще ссылки по теме:
C++ Перевод из одной системы счисления в другую
C++ Перевод из одной системы счисления в другую
C++ Перевод из одной системы счисления в другую
C++ Перевод из одной системы счисления в другую
Перевод из одной системы счисления в другую. C++

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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 22:15  [ТС]     Функции стандартной библиотеки для отображения одной системы счисления в другую #20
Написал для себя, но может кому ещё окажется полезным: файл bodh.h который содержит 2 функции 1-я bodh(), прототип которой unsigned long bodh( const char s[], const unsigned p ); функция принимает 2 аргумента, указатель на строку(служит для символьного эквивалента преобразуемой системы счисления) и код самой системы счисления (2, 8, 10, 16 ), и возвращает функция преобразуемый в десятичную систему счисления результат. 2-я функция bodh_b(), прототип которой unsigned long bodh_b( unsigned v ), возвращает десятичное значение - визуальное подобие десятичного значения в двоичной системе( т.е. если функция в качестве параметра имеет значение 254, то возвратит 11111110). Примечание, функции работают только с положительными не дробными аргументами. Для 8-16-ричной системы на подобии функции bodh_b не писал, так как для этого есть стандартные функции ( например printf( "%o %x") ).
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/* bodh.h
   "bin-oct-dec-hex converting functions from string
   and visually converation".
   contains:
   bodh() function.
   bodh_b() function.
*/
 
unsigned long bodh( const char s[], const unsigned p );
unsigned long bodh_b( unsigned v );
 
/* Convert string to value */
unsigned long bodh( const char s[], const unsigned p )
{
    unsigned long n;
    int i;
    
    n = 0;
    switch( p ) {
    case 2:
    for( i = 0; s[i] >= '0' && s[i] <= '1'; ++i )
        n = n * 2 + (s[i] - '0');
    return n;
    break;
    case 8:
    i = 0;
    if( s[i] == 'o' )
        ++i;
    for( ; s[i] >= '0' && s[i] <= '7'; ++i )
        n = n * 8 + (s[i] - '0');
    return n;
    break;
    case 10:  // aka atoi() from stdlib.h
    for( i = 0; s[i] >= '0' && s[i] <= '9'; ++i )
        n = n * 10 + (s[i] - '0');
    return n;
    break;
    case 16:
    i = 0;
    if( s[i] == '0' && (s[++i] == 'x' || s[i] == 'X'))
        ++i;
    else
        i = 0;
    for( ; (s[i] >= '0' && s[i] <= '9') ||
         (s[i] >= 'A' && s[i] <= 'F') ||
         (s[i] >= 'a' && s[i] <= 'f'); ++i ) {
        if( s[i] >= '0' && s[i] <= '9' )
        n = n * 16 + ( s[i] - '0' );
        else if (s[i] >= 'A' && s[i] <= 'F')
        n = n * 16 + ( s[i] - 'A' + 10 );
        else
        n = n * 16 + ( s[i] - 'a' + 10 );
    }
    return n;
    break;
    default:
    break;
    }
    return 0;
}
 
/* convert decimal to visually binary */
unsigned long bodh_b( unsigned v )
{
    unsigned long n;
    int i, arr_size;
    n = v;
    for( i = 0; v; ++i ) {
    v = v / 2;
    }
    arr_size = i--;
    int result[arr_size];
    v = n;
    for( ; v; --i ) {
    result[i] = (v % 2);
    v = v / 2;
    }
    for(i = n = 0; i != arr_size; ++i ) {
    n = n * 10 + result[i];
    }
    return n;
}
Добавлено через 10 минут
Результат применения функции:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include "bodh.h"
 
int main( void )
{
    printf( "%d\n", bodh_b( 19 ) );
    printf( "%d\n", bodh( "0xff3b", 16 ) );
    printf( "%d\n", bodh( "AF14", 16 ) );
    return 0;
}
Bash
1
2
3
4
5
6
[ilyuha21st@coldshoot currents]$ gcc -o test test.c
[ilyuha21st@coldshoot currents]$ ./test
10011
65339
44820
[ilyuha21st@coldshoot currents]$
Yandex
Объявления
02.12.2012, 22:15     Функции стандартной библиотеки для отображения одной системы счисления в другую
Ответ Создать тему
Опции темы

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