C语言如何将二进制转为十进制?

99ANYc3cd6
预计阅读时长 10 分钟
位置: 首页 C语言 正文

C语言将二进制转换为十进制

在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;
}

注意事项

  1. 二进制字符串可能有前缀"0b",如"0b1010",需要在转换前处理掉
  2. 对于非常大的二进制数,应使用unsigned long long或大整数库
  3. 方法二中的strtol可以处理带符号的长整型,对于无符号数可以使用strtoul

方法可以根据具体需求选择使用,方法一适合理解转换原理,方法二更简洁实用。

c语言将二进制转化为十进制
(图片来源网络,侵删)
c语言将二进制转化为十进制
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
C语言字符串如何准确转浮点数?
« 上一篇 03-06
长度省略号规则是什么?
下一篇 » 03-06

相关文章

取消
微信二维码
支付宝二维码

目录[+]