C++使用printf语句实现进制转换的示例代码

 更新时间:2025年04月18日 10:29:41   作者:小鹏编程  
在C语言中,printf 函数可以直接实现部分进制转换功能,通过格式说明符(format specifier)快速输出不同进制的数值,下面给大家分享C++使用printf语句实现进制转换的示例代码,感兴趣的朋友一起看看吧

在C语言中,printf 函数可以直接实现部分进制转换功能,通过格式说明符(format specifier)快速输出不同进制的数值。以下是详细使用方法及示例代码:

一、printf 原生支持的进制转换

1. 十进制、八进制、十六进制转换

#include <stdio.h>
int main() {
    int num = 255;
    // 十进制输出(默认)
    printf("十进制: %d\n", num);  // 255
    // 八进制输出(无前缀)
    printf("八进制: %o\n", num);  // 377
    // 十六进制输出(小写字母)
    printf("十六进制: %x\n", num); // ff
    // 十六进制输出(大写字母)
    printf("十六进制: %X\n", num); // FF
    return 0;
}

2. 显示进制前缀

#include <stdio.h>
int main() {
    int num = 255;
    // 显示八进制前缀 0
    printf("带前缀的八进制: %#o\n", num); // 0377
    // 显示十六进制前缀 0x/0X
    printf("带前缀的十六进制: %#x\n", num); // 0xff
    printf("带前缀的十六进制: %#X\n", num); // 0XFF
    return 0;
}

3. 指定输出宽度和填充

#include <stdio.h>
int main() {
    int num = 15;
    // 输出8位宽度,不足部分补前导零
    printf("补零的八进制: %#08o\n", num);  // 0000017
    printf("补零的十六进制: %#08x\n", num); // 0x00000f
    return 0;
}

二、printf 不支持的进制转换

1. 二进制输出(需要手动实现)

#include <stdio.h>
void print_binary(unsigned int num) {
    if (num > 1) print_binary(num >> 1);
    putchar((num & 1) ? '1' : '0');
}
int main() {
    int num = 10;
    printf("二进制: ");
    print_binary(num); // 1010
    return 0;
}

2. 任意进制转换(通用方法)

#include <stdio.h>
#include <string.h>
void reverse(char* str) {
    int len = strlen(str);
    for (int i = 0; i < len/2; i++) {
        char temp = str[i];
        str[i] = str[len-1 - i];
        str[len-1 - i] = temp;
    }
}
void dec_to_base(unsigned int num, int base, char* output) {
    if (base < 2 || base > 36) {
        strcpy(output, "Invalid base");
        return;
    }
    const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int index = 0;
    do {
        output[index++] = digits[num % base];
        num /= base;
    } while (num > 0);
    output[index] = '\0';
    reverse(output);
}
int main() {
    char buffer[32];
    dec_to_base(255, 2, buffer);
    printf("二进制: %s\n", buffer); // 11111111
    return 0;
}

三、输入其他进制的数值(scanf 的用法)

#include <stdio.h>
int main() {
    int num;
    // 输入十六进制数(如 FF)
    printf("输入十六进制数: ");
    scanf("%x", &num);
    printf("十进制值: %d\n", num); // 255
    // 输入八进制数(如 377)
    printf("输入八进制数: ");
    scanf("%o", &num);
    printf("十进制值: %d\n", num); // 255
    return 0;
}

四、注意事项

类型限制

使用 %o, %x, %X 时,建议用 unsigned 类型,避免符号扩展问题:

unsigned int num = 255;
printf("%#x\n", num); // 正确输出 0xff

二进制输出优化

// 使用宏定义快速输出二进制
#define PRINT_BINARY(n) \
    for (int i = sizeof(n)*8-1; i >= 0; i--) \
        putchar((n & (1 << i)) ? '1' : '0'); \
    putchar('\n')
int main() {
    PRINT_BINARY(10); // 00000000000000000000000000001010
    return 0;
}

大数处理

  • 对于超过 unsigned int 范围的数值,需使用字符串处理(类似 Python 的 int(string, base))。

通过 printf 可以直接实现八进制、十六进制的输出,二进制和其他进制需要手动实现。若需更复杂的进制转换(如浮点数转换或超大数处理),需结合字符串操作或数学库函数。

到此这篇关于C++使用printf语句实现进制转换的示例代码的文章就介绍到这了,更多相关C++ 进制转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Qt实现仿QQ设置面板功能

    利用Qt实现仿QQ设置面板功能

    这篇文章主要为大家详细介绍了如何利用Qt实现仿QQ设置面板功能,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 详细分析C++ 异常处理

    详细分析C++ 异常处理

    这篇文章主要介绍了C++ 异常处理的的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 堆基本操作实现最大堆

    堆基本操作实现最大堆

    这篇文章主要介绍了堆基本操作实现最大堆,需要的朋友可以参考下
    2014-02-02
  • C++用Dijkstra(迪杰斯特拉)算法求最短路径

    C++用Dijkstra(迪杰斯特拉)算法求最短路径

    Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。下面这篇文章就给大家介绍关于C++用Dijkstra算法(迪杰斯特拉算法)求最短路径的方法,下面来一起看看吧。
    2016-12-12
  • c语言中的二级指针做函数参数说明

    c语言中的二级指针做函数参数说明

    这篇文章主要介绍了c语言中的二级指针做函数参数说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • C++深入分析回顾函数重载

    C++深入分析回顾函数重载

    C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading),借助重载,一个函数名可以有多种用途
    2022-06-06
  • C++实现推箱子游戏

    C++实现推箱子游戏

    这篇文章主要为大家详细介绍了C++实现推箱子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C++通过msxml调用webservice示例分享

    C++通过msxml调用webservice示例分享

    这篇文章主要介绍了C++通过msxml调用webservice示例分享,需要的朋友可以参考下
    2014-03-03
  • 浅谈c语言中类型隐性转换的坑

    浅谈c语言中类型隐性转换的坑

    下面小编就为大家带来一篇浅谈c语言中类型隐性转换的坑。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • OpenGL通过中点法绘制直线和圆

    OpenGL通过中点法绘制直线和圆

    这篇文章主要为大家详细介绍了OpenGL通过中点法绘制直线和圆,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02

最新评论