【ARM 嵌入式 C 入门及渐进 18 -- 字符数字转整形函数 atoi 介绍】

发布于:2024-03-28 ⋅ 阅读:(77) ⋅ 点赞:(0)


请阅读【嵌入式开发学习必备专栏 】


字符数字转整形函数 atoi

在 C 语言中,main 函数能够接收命令行参数。这些参数通过两个参数传递给 main 函数:int argcchar *argv[]argc 是命令行参数的数量,argv 是参数的数组,其中 argv[0] 是程序的名称,argv[1]argv[argc-1] 是命令行传递的参数。
如果你想要接收三个参数并将它们作为数字字符串转换为整数,你可以这样写 main 函数:

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

int main(int argc, char *argv[]) 
{
    if (argc != 4) { // 程序名称 + 3 个参数
        printf("Usage: %s num1 num2 num3\n", argv[0]);
        return 1;
    }
    // 将参数字符串转换为整数
    int num1 = atoi(argv[1]);
    int num2 = atoi(argv[2]);
    int num3 = atoi(argv[3]);
   
    // 使用转换后的整数
    printf("The numbers are: %d, %d, %d\n", num1, num2, num3);
   
    // 你的逻辑代码...
    return 0;
}

在这个示例中,atoi 函数被用来将命令行参数(字符串)转换为整数。请注意 atoi 函数不会报告数字字符串转换失败的情况,如果传入的字符串不是有效的数字表示,它将返回 0。如果你需要更健壮的错误检查,请使用 strtolsscanf 等函数代替。
编译并运行这个程序,你可以这样调用它:

./your_program 123 456 789

这里,your_program 是你的可执行文件的名称,123, 456, 789 是你传递给程序的三个数字字符串参数。程序将输出:

The numbers are: 123, 456, 789

确保你的程序能够处理非数字字符串的情况,如果需要,可以添加适当的错误检查。

atoi 简单实现

atoi (ASCII to Integer)是一个将字符串转换为整数的 C 语言标准库函数。以下是 atoi 函数的一个简单实现,它模拟了标准库函数的基本行为:

#include <stdio.h>
#include <ctype.h>
int my_atoi(const char *str) {
    int result = 0;
    int sign = 1;
    // 跳过前面的空白字符
    while (isspace((unsigned char)*str)) {
        str++;
    }
    // 检查正负号
    if (*str == '-') {
        sign = -1;
        str++;
    } else if (*str == '+') {
        str++;
    }
    // 转换数字部分
    while (isdigit((unsigned char)*str)) {
        result = result * 10 + (*str - '0');
        str++;
    }
    return sign * result;
}
int main() {
    char str[] = "  -12345";
    int val = my_atoi(str);
    printf("%d\n", val);
    return 0;
}

在这个实现中,my_atoi 函数首先跳过任何空白字符,然后检查一个可选的正负号。接着,它开始处理字符串中的数字字符,将每个字符转换为对应的数字并加到结果中。一旦遇到非数字字符,就停止处理。

这个简单的实现不处理溢出,也不处理非法输入字符串(如包含非数字字符的字符串)。标准的 atoi 函数通常会有更复杂的错误检查和行为,以处理各种边界情况和溢出。如果需要处理溢出,通常会使用 strtolstrtoll 函数,它们提供了额外的错误检查功能。

本文含有隐藏内容,请 开通VIP 后查看