C 程序 八进制转换为十进制

  • Post category:C

下面是关于“C 程序 八进制转换为十进制”的使用攻略。

一、背景概述

在C语言中,八进制数以数字0开头,例如012表示十进制的10。当需要将八进制数转换为十进制数时,可以使用C语言中的函数来实现。

二、函数说明

C语言提供了一个标准库函数 strtol() 来将八进制数转换为十进制数。这个函数可以将一个字符串转换成一个长整数类型的值,并且支持多种进制的转换。

函数的原型如下:

long strtol(const char *nptr, char **endptr, int base)

函数参数的含义如下:

  • nptr:待转换的字符串。
  • endptr:指向一个指针,它指向的位置存放第一个不能被转换的字符的指针,如果没有不合法的字符,该指针的值应该与nptr的值相同。可以将其设为NULL,表示不需要获取这个值。
  • base:要转换的数的进制,可以取值为2至36,如果为0,则根据前缀“0x”或“0X”确定进制;如果没有前缀,则默认为十进制。

函数返回值为转换后的长整数类型的值。如果转换成功,则返回转换后的值,如果转换失败,则返回0。

三、使用示例

下面是两条使用示例:

1. 将八进制字符串转换为十进制数

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char* oct = "777"; // 八进制字符串
    char* endptr;
    long decimal = strtol(oct, &endptr, 8); // 按八进制转换
    if (*endptr != '\0')
    {
        printf("转换失败,第一个不能被转换的字符是:%c\n", *endptr);
    }
    else
    {
        printf("转换后的十进制数为:%ld\n", decimal);
    }
    return 0;
}

输出:

转换后的十进制数为:511

2. 使用 scanf() 从控制台输入八进制字符串并转换为十进制数

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char oct[10]; // 存放输入的八进制字符串
    printf("请输入一个八进制数:");
    scanf("%s", oct);
    char* endptr;
    long decimal = strtol(oct, &endptr, 8); // 按八进制转换
    if (*endptr != '\0')
    {
        printf("转换失败,第一个不能被转换的字符是:%c\n", *endptr);
    }
    else
    {
        printf("转换后的十进制数为:%ld\n", decimal);
    }
    return 0;
}

示例输出:

请输入一个八进制数:777
转换后的十进制数为:511

四、总结

使用C语言的标准库函数 strtol() 可以很方便地将八进制数转换为十进制数。在使用时需要注意函数参数和返回值,可以根据需要进行自定义处理。