int 与 string 转换是编程最基础高频操作,int 是整数数值类型,string 是字符串文本类型,两种类型底层存储完全不一样,int 保存二进制数值,string 保存字符编码,不能直接赋值,必须调用专门转换函数完成互转,也就是 int 转 string 把数字变成文本,string 转 int 把文本解析成整数,这个操作在表单输入 数据打印 文件读写 接口传参场景每天都会用到,很多新手踩坑集中在 string 转 int 的时候,字符串里面包含字母空格负号非法字符,转换直接报错或者得到异常值,同时不同编程语言转换 API 名称 异常机制 进制支持 溢出处理规则都不一样,C C++ Java Python C Sharp JavaScript 都有各自标准写法,还要区分安全转换和普通转换,安全转换可以捕获非法输入,普通转换遇到错误会崩溃或者抛出异常,理解 int 与 string 转换,重点掌握转换原理 常用写法 错误处理 溢出问题,是刷题 项目开发必掌握知识点。
核心转换原理
清单
1 int 转 string,本质是把二进制整数,按照十进制规则拆解每一位数字,再映射成对应的 ASCII 字符拼接成字符串
2 string 转 int,本质是遍历字符串每一个字符,识别数字字符,累加计算出对应的整数数值,同时识别正负号
3 两种类型不能隐式自动转换,大部分强类型语言必须显式调用转换方法
4 转换过程需要处理边界,比如空字符串 非数字字符 超出 int 取值范围 正负号
主流语言 int 转 string 写法
清单
1 C 语言,使用 sprintf snprintf,把整数格式化写入字符数组
2 C++,to_string 函数,或者 stringstream 流转换
3 Java,String.valueOf,或者 Integer.toString
4 Python,直接 str 函数,str (整数)
5 C,ToString 方法,int 变量.ToString ()
6 JavaScript,toString 方法,或者拼接空字符串
主流语言 string 转 int 写法
清单
1 C 语言,atoi 函数,进阶使用 strtol 支持进制和错误检测
2 C++,stoi 函数,stoll 处理更大整数,异常抛出
3 Java,Integer.parseInt,Integer.valueOf
4 Python,int 函数,int (字符串)
5 C,int.Parse,TryParse 安全转换
6 JavaScript,parseInt 函数
各语言转换对比表格
| 语言 | int 转 string | string 转 int | 错误处理 |
|---|---|---|---|
| C 语言 | sprintf | atoi strtol | atoi 无严格错误检测 strtol 可检测 |
| C++ | to_string | stoi | 非法字符抛出异常 |
| Java | Integer.toString | Integer.parseInt | 抛出 NumberFormatException |
| Python | str | int | 抛出 ValueError |
| C# | ToString | int.Parse TryParse | Parse 抛异常 TryParse 返回布尔值 |
| JavaScript | toString | parseInt | 非法部分解析 不严格报错 |
重点踩坑点
清单
1 atoi 函数缺陷,字符串非法的时候不会报错,返回 0,容易把错误输入和数字 0 混淆,正式项目推荐 strtol
2 stoi parseInt 遇到字符串前面带字母,部分写法会直接报错,parseInt 会从开头解析数字,后面字母直接忽略,行为不一样
3 溢出问题,string 转 int 的时候,如果数字超过 int 取值范围,会触发溢出错误,C++ stoi 会抛异常,C 语言 atoi 溢出是未定义行为
4 进制问题,默认是十进制,如果需要二进制十六进制转换,转换函数需要额外传入进制参数
5 空格问题,字符串前后带空格,部分转换函数可以自动忽略,部分严格转换会判定非法输入
进阶补充
清单
1 TryParse 属于安全转换,不会抛出异常,返回布尔值判断转换是否成功,适合用户输入校验场景,C Go 等语言都有同类设计
2 批量转换,循环里面大量 int 与 string 转换,会产生临时对象,在高性能场景会带来额外内存开销
3 数据库场景,SQL 里面 CAST CONVERT 也可以完成 int 与 string 转换,属于数据库层面类型转换
【常见问题】
问题 1 int 与 string 转换的时候,字符串里面有字母为什么转换失败
回答 1 int 与 string 转换核心是解析纯数字文本,如果字符串混入字母空格等非法字符,大部分强类型语言的 int 与 string 转换方法会判定格式错误,抛出转换异常。
问题 2 int 与 string 转换里面 atoi 和 stoi 有什么差别
回答 1 int 与 string 转换当中,atoi 是 C 语言旧函数,没有完善错误检测,stoi 是 C++ 标准函数,遇到非法字符和溢出会主动抛出异常,int 与 string 转换推荐优先使用 stoi。
问题 3 int 与 string 转换的时候数值超过 int 范围会怎么样
回答 1 int 与 string 转换过程,如果字符串解析出来的数字超出 int 取值上限或者下限,就会触发溢出错误,不同语言的 int 与 string 转换 API 处理方式不一样,有的抛出异常有的产生未定义结果。
问题 4 int 与 string 转换可以自动隐式转换吗
回答 1 int 与 string 转换在强类型语言里面一般不能自动隐式转换,必须显式调用 int 与 string 转换对应的 API,JavaScript 这类弱类型语言会存在隐式转换,但是不推荐依赖隐式转换。
【免责申明】
本文内容为 int 与 string 转换技术讲解,不同语言版本标准 编译器实现存在差异,生产代码处理用户输入必须增加格式校验和溢出判断,因未做异常捕获导致程序崩溃或者计算错误,需要自行承担相关风险。


