您现在的位置是:首页 >技术教程 >最简便高效的常见进制转换——C 和 C++版网站首页技术教程
最简便高效的常见进制转换——C 和 C++版
简介最简便高效的常见进制转换——C 和 C++版
C 语言实现
1. 十进制转二进制、八进制、十六进制
在 C 语言中,可以使用 printf
函数的格式化输出功能来完成十进制到其他进制的转换。
#include <stdio.h>
int main() {
int decimal_num;
scanf("%d",&decimal_num)//输入要转换的十进制数
// 十进制转二进制(借助位运算手动输出)
for (int i = 7; i >= 0; i--) {
printf("%d", (decimal_num >> i) & 1);
}
printf("
");
// 十进制转八进制
printf("%o
", decimal_num);
// 十进制转十六进制(小写字母)
printf("%x
", decimal_num);
// 十进制转十六进制(大写字母)
printf("%X
", decimal_num);
return 0;
}
解释:
- 十进制转二进制时,利用位运算
(decimal_num >> i) & 1
逐位提取二进制位并输出。 - 十进制转八进制使用
%o
格式说明符。 - 十进制转十六进制使用
%x
(小写字母)和%X
(大写字母)格式说明符。
2. 二进制、八进制、十六进制转十进制
可以使用 strtol
函数将其他进制的字符串表示转换为十进制整数。
#include <stdio.h>
#include <stdlib.h>
int main() {
//示例
char binary_str[] = "11111111";
char octal_str[] = "377";
char hex_str[] = "ff";
// 二进制转十进制
long binary_decimal = strtol(binary_str, NULL, 2);
printf("%ld
", binary_decimal);
// 八进制转十进制
long octal_decimal = strtol(octal_str, NULL, 8);
printf("%ld
", octal_decimal);
// 十六进制转十进制
long hex_decimal = strtol(hex_str, NULL, 16);
printf("%ld
", hex_decimal);
return 0;
}
解释:
strtol
函数的原型为 long strtol(const char *nptr, char **endptr, int base)
,其中 nptr
是要转换的字符串,endptr
用于存储转换结束的位置(这里设为 NULL
),base
是字符串表示的进制。
C++ 实现
1. 十进制转二进制、八进制、十六进制
C++ 可以使用 <iostream>
和 <bitset>
库来完成进制转换
#include <iostream>
#include <bitset>
#include <iomanip>
int main() {
int decimal_num = 255;
// 十进制转二进制
std::cout << std::bitset<8>(decimal_num) << std::endl;
// 十进制转八进制
std::cout << std::oct << decimal_num << std::endl;
// 十进制转十六进制(小写字母)
std::cout << std::hex << decimal_num << std::endl;
// 十进制转十六进制(大写字母)
std::cout << std::uppercase << std::hex << decimal_num << std::endl;
return 0;
}
解释:
- 十进制转二进制使用
std::bitset
模板类,指定二进制位数为 8。 - 十进制转八进制使用
std::oct
操纵符。 - 十进制转十六进制使用
std::hex
操纵符,std::uppercase
用于输出大写字母。
2. 二进制、八进制、十六进制转十进制
C++ 可以使用 std::stoi
函数将其他进制的字符串表示转换为十进制整数。
#include <iostream>
#include <string>
int main() {
std::string binary_str = "11111111";
std::string octal_str = "377";
std::string hex_str = "ff";
// 二进制转十进制
int binary_decimal = std::stoi(binary_str, nullptr, 2);
std::cout << binary_decimal << std::endl;
// 八进制转十进制
int octal_decimal = std::stoi(octal_str, nullptr, 8);
std::cout << octal_decimal << std::endl;
// 十六进制转十进制
int hex_decimal = std::stoi(hex_str, nullptr, 16);
std::cout << hex_decimal << std::endl;
return 0;
}
解释:
std::stoi
函数的原型为 int stoi(const std::string& str, std::size_t* pos = 0, int base = 10)
,其中 str
是要转换的字符串,pos
用于存储转换结束的位置(这里设为 nullptr
),base
是字符串表示的进制。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。