字符串string转换长整型int(八进制、十进制、十六进制)

一、strtoul函数

strtoul()是C语言标准库中用于将字符串转换成无符号长整数的函数。它的完整原型如下:

unsigned long strtoul(const char *nptr, char **endptr, int base);

其中,nptr代表要被转换成无符号长整数的字符串;endptr是一个指向字符指针的指针,该指针指向已经转换了的最后一个字符的下一个位置;base指定要采用的进制,范围是2 ~ 36。

该函数返回转换后的无符号长整数。

如果在转换过程中发生错误,比如输入的数字超出了有效表示范围或格式不正确,那么该函数返回0,并将endptr指向传入的参数nptr的首地址。

需要注意的是,在使用该函数转换字符串时,当base参数为0时,会根据字符串前缀来判断进制('0x’或’0X’为16进制,'0’为八进制,其他情况均为十进制)。

二、字符串转换长整型

下面是一个使用strtoul()函数的示例。假设我们有一个字符串str,表示一个无符号整数值,我们想将它转换为无符号长整型并输出。

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

int main() {
    char str[] = "12345";
    char *endptr;
    unsigned long val;

    val = strtoul(str, &endptr, 10);
    if (endptr == str) {
        printf("没有任何数字被转换!\n");
    } else {
        printf("字符串 %s 转换为无符号长整数结果为 %lu\n", str, val);
    }

    return 0;
}

输出结果为:

字符串 12345 转换为无符号长整数结果为 12345

在这个例子中,我们定义了一个字符串str,表示要转换为无符号长整数的值。然后,我们调用strtoul()函数进行转换,并将其结果保存在变量val中。

为了判断是否转换成功,我们还定义了一个指向字符指针的指针endptr,并传入其地址作为strtoul()函数的第二个参数。如果转换成功,endptr会指向已经转换了的最后一个字符的下一个位置。如果无法进行有效的转换,则返回的endptr值和传入的参数str相等。

最后,我们根据是否转换成功来打印输出不同的信息。

三、十六进制转换长整型

下面是一个使用strtoul()函数将十六进制字符串转换为无符号长整数的示例:

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

int main() {
    char str[] = "0x7fff";
    char *endptr;
    unsigned long val;

    val = strtoul(str, &endptr, 16);
    if (endptr == str) {
        printf("没有任何数字被转换!\n");
    } else {
        printf("字符串 %s 转换为无符号长整数结果为 %lu\n", str, val);
    }

    return 0;
}

输出结果为:

字符串 0x7fff 转换为无符号长整数结果为 32767

在这个例子中,我们定义了一个表示要转换为无符号长整数的十六进制字符串str。由于其包含前缀0x,因此我们可以将第三个参数传递为16,指定16进制。其余部分与前面例子一致。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrWang.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值