интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
1

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

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

Author24 — интернет-сервис помощи студентам
Вопрос заключается в том, существует ли в стандартной библиотеки функции типа atoi(), но для 2-8-16 ричной системы? И наоборот, которые преобразовывают значение 2-8-16 ричной системы в соответствующую строку символов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2012, 00:30
Ответы с готовыми решениями:

Программа для перевода из одной системы счисления в другую.
Помогите пожалуйста написать программу для перевода чисел из одной системы в другую. Используемые...

Программа для перевода числа из одной системы счисления в другую
Разработать программный продукт для перевода целого положительного числа из одной системы счисления...

Перевод из одной системы счисления в другую от 2 до 36
Помогите пожалуйсто, сколько сижу ничего стоющего не приходит в голову! Дано целое неотрицательное...

Перевод из одной системы счисления в другую.
Помогите пожалуйста написать программу для перевода чисел из одной системы в другую. Используемые...

19
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.12.2012, 00:38 2
C++
1
itoa(int value,char *dest,int radix);
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 00:40  [ТС] 3
В манах нарыл только для работы с десятичной системой atof(), afol(), strtol(), strtoul(), strtold() ...
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.12.2012, 00:43 4
Цитата Сообщение от xtorne21st Посмотреть сообщение
В манах нарыл только для работы с десятичной системой atof(), afol(), strtol(), strtoul(), strtold() ...
Это перевод из строки в число. В памяти это все равно будет храниться как двоично число.
0
интересующийся
311 / 282 / 93
Регистрация: 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
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.12.2012, 00:53 6
C++
1
#include <cstdlib>
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 00:57  [ТС] 7
При всём уважении к вам, но что означает это?
Цитата Сообщение от Croessmah Посмотреть сообщение
1
#include <cstdlib>
Вопрос, ответ, что?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 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;
}
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
02.12.2012, 01:01 9
Croessmah, это не стандартная функция, так что ее может попросту не быть.
0
интересующийся
311 / 282 / 93
Регистрация: 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
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.12.2012, 01:03 11
Цитата Сообщение от Toshkarik Посмотреть сообщение
Croessmah, это не стандартная функция, так что ее может попросту не быть.
в GCC и студии имеется
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.12.2012, 01:04 12
Цитата Сообщение от xtorne21st Посмотреть сообщение
Нет такой функции в gcc
Название: Безымянный.jpg
Просмотров: 239

Размер: 6.8 Кб
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 01:04  [ТС] 13
Я понимаю, что особого труда их составить нету, но мне интересно предусмотрено стандартом данные функции?
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.12.2012, 01:06 14
Хотя, может оно и не переносимо...
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 01:11  [ТС] 15
Цитата Сообщение от Croessmah Посмотреть сообщение
в GCC и студии имеется
Я не в курсе, как реализован gcc под windows, но уверяю вас у меня в системе в stdlib.h напрочь отсутствует itoa.
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
02.12.2012, 01:22 16
xtorne21st, stdlib.h может включать и другие заголовки, в которых может находится прототип этой функции.
1
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.12.2012, 01:26 17
Цитата Сообщение от Toshkarik Посмотреть сообщение
xtorne21st, stdlib.h может включать и другие заголовки, в которых может находится прототип этой функции.
Врядли. Если я не ошибаюсь, то в Линуксе нет такой функции
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
02.12.2012, 01:39  [ТС] 18
Я прогуглил, да действительно, нет такой функции в gcc на линуксе.

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

осталось выяснить, есть ли в стандарте аналог... )) Или придётся писать свои...
Иногда просто очень интересно, чему равняется скажем, 4532 в двоичной системе...
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 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;
}
0
интересующийся
311 / 282 / 93
Регистрация: 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]$
0
02.12.2012, 22:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2012, 22:15
Помогаю со студенческими работами здесь

Перевод из одной системы счисления в другую
Может кто подскажет ссылки где можно почитать про перевод чисел из однйо системы счисления в...

Перевод из одной системы счисления в другую
Суть задачи такова: Написать программу , которая переводит число из 2-й системы счистления в 12-ю...

Перевод из одной системы счисления в другую
Помогите разобраться с переводом из любой системы счисления в любую. Хотел составить программу...

Перевод из одной системы счисления в другую
Составить программу перевода натурального числа из позиционной системы счисления с основанием m в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru