在 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
五、常见坑(必看)
- 缓冲区溢出:字符串数组要足够大
- 非数字字符: atoi 遇到非数字会停止
- 负数处理: - 只能在开头
- 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) |