在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++ 进制转换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论