C++中的各种进制转换函数汇总

C++中的各种进制转换函数汇总一 指定格式输出 nbsp 1 在 C 中 按指定进制格式输出如下 printf 05o n 35 nbsp nbsp nbsp nbsp 按八进制格式输出 保留 5 位高位补零 printf 03d n 35 nbsp nbsp nbsp nbsp 按十进制格式输出 保留 3 位高位补零 printf 05x n 35 nbsp nbsp nbsp nbsp 按十六进制格式输出 保留 5 位高位补零 2 在 C 中 按指定进制格式输出如下 include

一,指定格式输出

 

1.在C中,按指定进制格式输出如下,

printf("%05o\n",35);    //按八进制格式输出,保留5位高位补零 printf("%03d\n",35);    //按十进制格式输出,保留3位高位补零 printf("%05x\n",35);    //按十六进制格式输出,保留5位高位补零

2.在C++中,按指定进制格式输出如下,

#include 
  
    #include 
   
     using namespace std; int main() { cout << "35的8进制:" << std::oct << 35<< endl; cout << "35的10进制" << std::dec << 35 << endl; cout << "35的16进制:" << std::hex << 35 << endl; cout << "35的2进制: " << bitset<8>(35) << endl;     //<8>:表示保留8位输出 return 0; } 
    
  

 

 

二,C/C++各种进制转换库函数

 

一)任意2-36进制数转化为10进制数。

建议自己写函数,代码如下:

int Atoi(string s,int radix) //s是给定的radix进制字符串 { int ans=0; for(int i=0;i 
  
    ='0'&&t<='9') ans=ans*radix+t-'0'; else ans=ans*radix+t-'a'+10; } return ans; } 
  

    1.strtol()函数(百度百科)

       函数原型:long int strtol(const char *nptr, char endptr, int base)

 

    base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符,例如:

 

#include 
  
    int main() { char buffer[20]="10549stend#12"; char *stop; int ans=strtol(buffer, &stop, 8);   //将八进制数1054转成十进制,后面均为非法字符 printf("%d\n",ans); printf("%s\n", stop); return 0; } 
  

 

输出结果:

556

9stend#12

 

 

注意:

    ①如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。

 

 

    ②如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。

    ③如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。

 

    ④对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。

 

)将10进制数转换为任意的n进制数,结果为char型。

建议自己写,代码如下:

string intToA(int n,int radix) //n是待转数字,radix是指定的进制 { string ans=""; do{ int t=n%radix; if(t>=0&&t<=9) ans+=t+'0'; else ans+=t-10+'a'; n/=radix; }while(n!=0); //使用do{}while()以防止输入为0的情况 reverse(ans.begin(),ans.end()); return ans; }

    1.itoa()函数(可以将一个10进制数转换为任意的2-36进制字符串)

 

       函数原型:char*itoa(int value,char*string,int radix);

 

 

例如:itoa(num, str, 2); num是一个int型的,是要转化的10进制数,str是转化结果,后面的值为目标进制。

#include 
  
    #include 
   
     int main() {     int num = 10;     char str[100];     _itoa(num, str, 2); //c++中一般用_itoa,用itoa也行,     printf("%s\n", str);     return 0; } 
    
  

2.sprintf()函数(可以将一个10进制数转换为指定格式的n进制字符串)

函数原型:int sprintf( char *buffer, const char *format, [ argument] … );

#include 
  
    int main() { char s[100]={0}; sprintf(s, "%d", 123); //十进制输出产生"123" sprintf(s, "%4d%4d", 123, 4567); //指定宽度不足的左边补空格,产生:" " sprintf(s, "%8o", 123); //八进制输出,宽度占8个位置 sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐 sprintf(s, "%10.3f", 3.); //产生:" 3.142" int i = 100; sprintf(s, "%.2f", i); //注意这是不对的 sprintf(s, "%.2f", (double)i); //要按照这种方式才行 return 0; } 
  

三)使用字符串流stringstream(头文件#include

)

 

    1.将八,十六进制转十进制。

#include 
  
    #include 
   
     #include 
    
      using namespace std; int main(void) { string s="20"; int a; stringstream ss; ss< 
     
       >a;        //10进制int型输出 cout< 
       
      
     
    
  

2.将十进制转八,十六进制。

#include 
  
    #include 
   
     #include 
    
      #include 
     
       using namespace std; int main(void) { string s1,s2; int a=30; stringstream ss; ss< 
      
        >s1; cout< 
       
         >s2; cout< 
         
        
       
      
     
    
  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225047.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午10:15
下一篇 2026年3月17日 上午10:15


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号