2012-03-24 3 views
0

Мне нужно создать класс MyInt, который обрабатывает положительные числа любого размера, создавая массив int. Я делаю конструктор, который будет использоваться при преобразовании int (любого размера, поддерживаемого ints) в MyInt. Мне нужно преобразовать int в массив символов, а затем прочитать цифру по цифре в массив int. Поэтому мой вопрос заключается в том, что без использования каких-либо библиотек, кроме <iostream><iomanip> и <cstring> Как преобразовать int с несколькими цифрами в массив символов?Преобразование Int в Char Array

+3

Зачем вам нужно преобразовать в массив 'char'? Почему бы просто не перейти непосредственно к финальному массиву 'int'? –

+0

Как я могу это сделать? Преобразовать int в массив int? – easyxtarget

+2

Что должно содержать содержимое массива int? –

ответ

0

Не уверен, если это то, что вы хотите, но:

int myInt = 30; 
char *chars = reinterpret_cast<char*>(&myInt); 

И вы можете получить 4 отдельный Чара:

chars[0]; // is the first char 
chars[1]; // is the second char 
chars[2]; // is the third char, and 
chars[3]; // is the fourth/last char 

... но я не совсем уверен, что это что ты ищешь.

+0

Это не работает, по крайней мере, если я не понимаю вопрос. Ваш код создает массив символов с одним символом: символ с ASCII значением 30. Он не будет создавать массив символов с символом «3», «0» и нулевым терминатором, который (если я понимаю правильно), чего хочет OP. –

0

Один из возможных способов сделать это преобразование с помощью таких ограничений заключаются в следующие:

function convert: 
    //find out length of integer (integer division works well) 
    //make a char array of a big enough size (including the \0 if you need to print it) 
    //use division and modulus to fill in the array one character at a time 
    //if you want readable characters, don't forget to adjust for them 
    //don't forget to set the null character if you need it 

Я надеюсь, что я не понял ваш вопрос, но это работает для меня, давая мне для печати массива, которые читают то же самое как целое.

1

В качестве промежуточного шага вам не нужно создавать массив char. Цифры (я предполагаю, что в базе 10) можно получить один за другим, используя по модулю 10 операций. Что-то вроде:

convert(int *ar, const int i) 
{ 
    int p, tmp; 

    tmp = i 
    while (tmp != 0) 
    { 
     ar[p] = tmp % 10; 
     tmp = (tmp - ar[p])/10; 
     p++; 
    } 
} 
Смежные вопросы