C/C++ 中,整数 ↔ 字符、整数 ↔ 字符串

在 C/C++ 中,整数 ↔ 字符、整数 ↔ 字符串 是高频操作,核心区别在于:

  • 字符:单个 ASCII 码(如 '5' )
  • 字符串:以 \0 结尾的字符数组(如 "123" )

下面给你最清晰、可直接用的转换方法(含原理、代码、注意事项)。

一、整数 ↔ 字符(单个数字)

1. 整数 → 字符(如 5 → '5')

原理:ASCII 码中, '0' 是 48,数字字符连续。

c 复制代码
int num = 5;
char ch = num + '0';  // 5 + 48 = 53 → '5'

2. 字符 → 整数(如 '5' → 5)

c 复制代码
char ch = '5';
int num = ch - '0';  // 53 - 48 = 5

注意

  • 只能处理 0~9 的单个数字
  • 必须确保字符是数字,否则结果错误

二、整数 ↔ 字符串(多位数字)

*1. 整数 → 字符串(int → char)**

方法1:sprintf(通用,C/C++ 都能用)

c 复制代码
int num = 12345;
char str[20];
sprintf(str, "%d", num);  // str = "12345"

方法2:itoa(非标准,部分编译器支持)

c 复制代码
char str[20];
itoa(num, str, 10);  // 10 表示十进制

方法3:C++11 to_string(推荐)

cpp 复制代码
int num = 123;
string s = to_string(num);

*2. 字符串 → 整数(char → int)**

方法1:atoi(C 标准,简单)

c 复制代码
char str[] = "12345";
int num = atoi(str);  // 12345

方法2:sscanf(更安全,可处理格式)

c 复制代码
char str[] = "123";
int num;
sscanf(str, "%d", &num);

方法3:C++ stoi(推荐,支持异常)

cpp 复制代码
string s = "123";
int num = stoi(s);

三、负整数转换

整数 → 字符串

c 复制代码
int num = -123;
char str[20];
sprintf(str, "%d", num);  // "-123"

字符串 → 整数

c 复制代码
char str[] = "-456";
int num = atoi(str);  // -456

四、十六进制/二进制转换(拓展)

整数 → 十六进制字符串

c 复制代码
int num = 0x1A;
char str[20];
sprintf(str, "%X", num);  // "1A"

十六进制字符串 → 整数

c 复制代码
char str[] = "1A";
int num;
sscanf(str, "%x", &num);  // 26

五、常见坑(必看)

  1. 缓冲区溢出:字符串数组要足够大
  2. 非数字字符: atoi 遇到非数字会停止
  3. 负数处理: - 只能在开头
  4. C++ 优先用 to_string / stoi ,更安全

六、速查表(直接背)

转换方向 写法(C) 写法(C++)
int → char ch = num + '0' 同上(ch = num + '0')
char → int num = ch - '0' 同上(num = ch - '0')
int → string sprintf(str, "%d", num) to_string(num)
string → int atoi(str) stoi(str)
相关推荐
lhbweilai25 分钟前
分析FreeRTOS内核对象API的源码实现(四)
c语言·stm32·单片机
inrichtt3 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
把我格子衫拿来5 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
无忧.芙桃5 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态
wuminyu7 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
xxwl5857 小时前
区域赛分类题解
c++·笔记·学习·算法
青少儿编程课堂8 小时前
蓝桥杯+全国青少年信息素养大赛+电子学会PythonC/C++考级:最长公共子序列LCS解析
c++·python·算法·bfs·信息学竞赛
Zwawa9 小时前
让电机走到指定位置:编码器位置环 PID
c语言·单片机·嵌入式
代钦塔拉9 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
fensnote10 小时前
西门子 S7 PLC 内部寄存器读写 Demo(C 语言)
c语言·开发语言