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

2025-04-18 16:50

本文主要是介绍C++使用printf语句实现进制转换的示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+...

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

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

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

#include <stdio.h>
int main() {
    int num = 255;
    // 十进制输出(默认)
    pandroidrintf("十进制: %d\n", num); php // 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("补零的China编程八进制: %#08o\n", num);  // 0000017
    printf("补零的十六进制: %#08x\n", num); // 0x00000f
    return 0;
}

二、printf 不支持的进制转换

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

#include <stdio.h>
void print_binary(unsigned inhttp://www.chinasem.cnt 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[] = "0123456789pFaCSNABCDEFGHIJKLMNOPQRSTUVWXYZ";
    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 范围的数值,需使用字符串处理(类似 pythonint(string, base))。

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

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

这篇关于C++使用printf语句实现进制转换的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154274

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结