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)
相关推荐
用户8055336980321 小时前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
澈20721 小时前
STL迭代器:容器遍历的万能钥匙
开发语言·c++
azoo21 小时前
emplace_back和push_back() 函数添加 cv::Point 类型数据
c++·opencv
样例过了就是过了21 小时前
LeetCode热题 不同路径
c++·算法·leetcode·动态规划
Navigator_Z1 天前
LeetCode //C - 1031. Maximum Sum of Two Non-Overlapping Subarrays
c语言·算法·leetcode
橙子也要努力变强1 天前
信号的保存、阻塞与递达
linux·服务器·c++
旖-旎1 天前
深搜练习(组合总和)(7)
c++·算法·深度优先·力扣
T0uken1 天前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
睡一觉就好了。1 天前
C++11(一)
c++