尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C语言 strtol() 函数用法

C语言 strtol() 函数用法
📅 发布时间:2026/6/19 3:19:21

strtol 是 C 标准库中的一个重要函数,用于将字符串转换为长整数。下面解释这个函数:

函数原型

long int strtol(const char* str, char** endptr, int base);

参数说明

1. str - 要转换的字符串

  • 指向【以 null 结尾的字符串】的指针(非常重要:请确保输入字符串以 null 结尾)

  • 函数会跳过前面的空白字符

2. endptr - 结束指针(可选)

(主要的作用:用于输入错误检测)

  • 如果非 NULL,函数会将第一个无效字符的地址存储在这里

  • 如果为 NULL,则忽略此信息

3. base - 进制基数

  • 2-36:指定转换的进制

  • 0:自动检测进制(根据字符串前缀)

    • 0x 或 0X:十六进制

    • 0:八进制

    • 其他:十进制

返回值

  • 成功:转换后的长整数值

  • 失败:0 或 LONG_MAX/LONG_MIN(溢出时)

  • 设置 errno 来指示错误类型

使用示例

1. 基本转换

#include <stdlib.h>
#include <stdio.h>int main() {const char* str1 = "12345";const char* str2 = "0x1A3F";const char* str3 = "1010";//指定字符串和进制,进行数字的转换long num1 = strtol(str1, NULL, 10);  // 十进制: 12345long num2 = strtol(str2, NULL, 0);   // 自动检测: 6719long num3 = strtol(str3, NULL, 2);   // 二进制: 10//打印结果以十进制显示printf("num1 = %ld\n", num1);//结果:12345printf("num2 = %ld\n", num2);//结果:6719printf("num3 = %ld\n", num3);//结果:10return 0;
}

2. 使用 endptr 检测转换结果下载

#include <stdlib.h>
#include <stdio.h>int main() {const char* str = "123abc";char* endptr;long num = strtol(str, &endptr, 10);printf("转换的数字: %ld\n", num);    // 123printf("剩余字符串: \"%s\"\n", endptr); // "abc"printf("转换的字符数: %td\n", endptr - str); // 3return 0;
}

3. 错误处理

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <limits.h>int main() {const char* str1 = "99999999999999999999"; // 超出 long 范围const char* str2 = "invalid";char* endptr;errno = 0; // 重置错误标志long num1 = strtol(str1, &endptr, 10);if (errno == ERANGE) {printf("数值超出范围\n");if (num1 == LONG_MAX)printf("上溢发生\n");else if (num1 == LONG_MIN)printf("下溢发生\n");}errno = 0;long num2 = strtol(str2, &endptr, 10);if (endptr == str2) {printf("没有数字被转换\n");}return 0;
}

在原代码中的应用

outputArray[outputSize++] = strtol(byteStr, nullptr, 16);

这里的使用:

  • byteStr:包含两个十六进制字符的字符串(如 "1A")

  • nullptr:不关心结束位置

  • 16:明确指定十六进制转换

转换过程:

  • "1A" → 1*16 + 10 = 26 → 0x1A

  • "FF" → 15*16 + 15 = 255 → 0xFF

  • "00" → 0*16 + 0 = 0 → 0x00

相关函数家族

 
函数 返回类型 说明
strtol long 转换到长整数
strtoll long long 转换到长长整数
strtoul unsigned long 转换到无符号长整数
strtod double 转换到双精度浮点数
atoi int 简单转换(不检查错误)

重要注意事项

  1. 错误处理:总是检查 errno 和 endptr

  2. 边界检查:确保输入字符串以 null 结尾

  3. 进制选择:使用 0 让函数自动检测通常更安全

  4. 性能:比 atoi 慢但更安全,支持错误检测

strtol 是一个强大而灵活的函数,特别适合需要健壮错误处理的场景。

 
 
 
 
 

相关新闻

  • task2.c
  • SpringCloud-01(认识微服务,服务拆分和远程调用,Eureak注册中心,Ribbon负载均衡,Nacos注册中心) - a
  • AI数据管道同步引擎技术解析

最新新闻

  • Microchip 24AA32AF与24LC32AF EEPROM选型指南与I2C实战
  • 终极Buck-Boost电感计算器:免费电源设计神器完整指南
  • 5:ROS2 Humble :工作空间完整详解
  • 阿里国际agent开发岗,我跪了!!!
  • 小红书2026.6.11推荐算法升级深度解析:语义质量评分、深度互动建模与AI内容检测的技术拆解
  • AutoDrive Challenge™:学生如何从零构建L4自动驾驶系统

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号