C语言将二进制转换为十进制
在C语言中,将二进制数转换为十进制数有几种常见方法,下面我将介绍两种主要方法:逐位计算法和使用标准库函数法。

(图片来源网络,侵删)
逐位计算法
这种方法通过遍历二进制数的每一位,根据其位置计算对应的十进制值。
#include <stdio.h>
#include <string.h>
#include <math.h>
// 函数声明
int binaryToDecimal(const char *binaryStr);
int main() {
char binaryStr[100];
printf("请输入一个二进制数: ");
scanf("%s", binaryStr);
// 验证输入是否为有效的二进制数
for (int i = 0; binaryStr[i] != '\0'; i++) {
if (binaryStr[i] != '0' && binaryStr[i] != '1') {
printf("错误: 输入的不是有效的二进制数\n");
return 1;
}
}
int decimal = binaryToDecimal(binaryStr);
printf("十进制值为: %d\n", decimal);
return 0;
}
// 函数定义:将二进制字符串转换为十进制数
int binaryToDecimal(const char *binaryStr) {
int decimal = 0;
int length = strlen(binaryStr);
for (int i = 0; i < length; i++) {
// 从左到右处理,当前位置是length-1-i
if (binaryStr[i] == '1') {
decimal += pow(2, length - 1 - i);
}
}
return decimal;
}
使用标准库函数法
C语言的标准库中提供了strtol函数,可以方便地将字符串转换为长整型,并支持指定基数(2表示二进制)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main() {
char binaryStr[100];
char *endptr;
long decimal;
printf("请输入一个二进制数: ");
scanf("%s", binaryStr);
// 验证输入是否为有效的二进制数
for (int i = 0; binaryStr[i] != '\0'; i++) {
if (binaryStr[i] != '0' && binaryStr[i] != '1') {
printf("错误: 输入的不是有效的二进制数\n");
return 1;
}
}
// 使用strtol函数转换
errno = 0; // 重置错误标志
decimal = strtol(binaryStr, &endptr, 2);
// 检查转换是否成功
if (errno == ERANGE) {
printf("错误: 数值超出范围\n");
return 1;
}
if (*endptr != '\0') {
printf("错误: 输入包含非二进制字符\n");
return 1;
}
printf("十进制值为: %ld\n", decimal);
return 0;
}
直接处理整数(如果二进制数存储为整数)
如果二进制数已经以整数形式存储(例如0b1010),可以直接使用位运算:
#include <stdio.h>
int main() {
int binary = 0b1010; // 二进制数1010
int decimal = binary; // 在C中,二进制常量直接就是十进制值
printf("二进制数1010的十进制值为: %d\n", decimal);
return 0;
}
注意事项
- 二进制字符串可能有前缀"0b",如"0b1010",需要在转换前处理掉
- 对于非常大的二进制数,应使用
unsigned long long或大整数库 - 方法二中的
strtol可以处理带符号的长整型,对于无符号数可以使用strtoul
方法可以根据具体需求选择使用,方法一适合理解转换原理,方法二更简洁实用。

(图片来源网络,侵删)

(图片来源网络,侵删)
