C/C++ 字符串与数字相互转化方法小结

本文深入探讨了在编程中将字符串转换为数字以及将数字转换为字符串的常见方法,包括使用`atoi()`, `atol()`, `atoll()`, `atof()`等函数进行字符串到数字的转换,以及通过`sprintf()`, `ostringstream`或`stringstream`实现数字到字符串的转换。文章详细解释了这些函数的功能、参数和返回值,并提供了实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 字符串 --> 数字

ato<xxx>: atoi(), atol(), atoll(), atof()
strto<xxx>: strtol(), strtoul(), strtod()
strto<xxx> 是 ato<xxx> 的升级版:
(1) strto<xxx> 支持转化成多种进制
(2) ato<xxx> 对错误情况的处理很不完善, strto<xxx> 对完善了错误处理

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

int
main(int argc, char *argv[])
{
    int base;
    char *endptr, *str;
    long val;

    if (argc < 2)
    {
        fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    str = argv[1];
    base = (argc > 2) ? atoi(argv[2]) : 10;

    errno = 0;  /* To distinguish success/failure after call */
    val = strtol(str, &endptr, base);

    /* Check for various possible errors */
    if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
           || (errno != 0 && val == 0))
    {
        perror("strtol");
        exit(EXIT_FAILURE);
    }

    if (endptr == str)
    {
        fprintf(stderr, "No digits were found\n");
        exit(EXIT_FAILURE);
    }

    /* If we got here, strtol() successfully parsed a number */
    printf("strtol() returned %ld\n", val);

    if (*endptr != '\0')    /* Not necessarily an error... */
        printf("Further characters after number: %s\n", endptr);

    exit(EXIT_SUCCESS);
}

http://man7.org/linux/man-pages/man3/strtoll.3.html

2. 数字 --> 字符串

(1) sprintf()
(2) ostringstream or stringstream:  http://blog.youkuaiyun.com/duyiwuer2009/article/details/23165627



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值