从基数10转换为2到36之间的任何基数

时间:2016-10-01 05:23:30

标签: c++ ascii converter base

我正在编写一个C ++代码,它将无符号的10位整数转换为2到36之间的任何其他基数。我暂时没有编码,所以我有点重新学习所有东西。我的问题是:如何将它保持为printf,最后没有cout,仍然显示ascii值。是否有可能使它变得简单(基本)。如果我没有正确格式化,那么就可以了。

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
using namespace std;

int main() 
{
    int InitialNum, BaseNum, Num, x;
    string FinalNum, Temp;

    printf("Enter an unsigned integer of base ten: \n");//Prompt user for     input
    scanf_s("%d", &InitialNum);
    printf("Enter the base you want to convert to (min2, max36): \n");
    scanf_s("%d", &BaseNum);            
    x = InitialNum; //save the base 10 number to display at the end


    while (InitialNum != 0) //continue dividing until original input is 0
    {              
        Num = InitialNum % BaseNum;  //save remainder to Num                         
        int ascii = 48; //declare conversion variable (from int to char)            
        for (int i = 0; i < 32; ++i)//for loop converts Num from int 0-15 to char '0'-'9', 'A'-'F'
        {
            if(Num == i)
            Temp = ascii;                 
            ascii += 1;                                 
            if (ascii == 58)//skip from 9 to A on the ascii table and continue
            ascii = 65;
        }                         
        FinalNum = Temp + FinalNum;//add to the final answer(additions to the left)                       
        InitialNum /= BaseNum; //the initial base10 number gets divided by the base and saved as the quotient              
    }        
    printf("The number %d converted to base %d is:", x, BaseNum); 
    cout<<(FinalNum);
    system("PAUSE");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

为了输出带有std::string的{​​{1}},您必须将其作为以空字符结尾的字符串(C样式字符串)提供给printf。或者,你绝对没有 :你可以一次打印一个角色。但是将它作为一个以空字符结尾的字符串提供它是最容易和最实际的。

您可以通过printf成员函数执行此操作,因此:

.c_str()

请注意,由于动态分配,使用printf( "%s\n", FinalString.c_str() ); 在这种低级别的事情上可能会很昂贵。例如,(http://www.strudel.org.uk/itoa/),对std::string的各种实现进行计时,发现了40倍的惩罚。