数据类型转换
显式转换(强制类型转换)
int a = 5; float b = (float)a / 2; // 将int转为float,避免整数除法
隐式转换(自动类型提升)
int a = 5; float b = a / 2.0f; // 自动将a转为float参与运算
字符串转换
字符串转数字
#include <stdlib.h>
#include <stdio.h>
int main() {
char str[] = "123";
int num = atoi(str); // 转为int
double d = atof(str); // 转为double
long l = atol(str); // 转为long
printf("%d %lf %ld\n", num, d, l);
return 0;
}
数字转字符串
#include <stdio.h>
int main() {
int num = 42;
char str[20];
sprintf(str, "%d", num); // 将数字转为字符串
printf("String: %s\n", str);
return 0;
}
数组/字符串处理
字符大小写转换
#include <ctype.h>
#include <string.h>
void to_upper(char *str) {
for (int i = 0; str[i]; i++) {
str[i] = toupper(str[i]); // 转为大写
}
}
int main() {
char text[] = "Hello";
to_upper(text);
printf("%s\n", text); // 输出: HELLO
return 0;
}
数组元素转换(如平方)
#include <stdio.h>
void transform_array(int arr[], int size, int (*func)(int)) {
for (int i = 0; i < size; i++) {
arr[i] = func(arr[i]);
}
}
int square(int x) { return x * x; }
int main() {
int arr[] = {1, 2, 3, 4};
transform_array(arr, 4, square);
for (int i = 0; i < 4; i++) {
printf("%d ", arr[i]); // 输出: 1 4 9 16
}
return 0;
}
自定义转换函数
进制转换(如十进制转二进制)
#include <stdio.h>
void decimal_to_binary(int num) {
if (num > 1) {
decimal_to_binary(num / 2);
}
printf("%d", num % 2);
}
int main() {
int num = 10;
printf("Binary: ");
decimal_to_binary(num); // 输出: 1010
return 0;
}
使用标准库函数
qsort 中的转换(排序时转换数据)
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b); // 升序排序
}
int main() {
int arr[] = {4, 2, 9, 1};
qsort(arr, 4, sizeof(int), compare);
for (int i = 0; i < 4; i++) {
printf("%d ", arr[i]); // 输出: 1 2 4 9
}
return 0;
}
| 场景 | 方法 |
|---|---|
| 数据类型转换 | 强制类型转换 (type)var 或隐式转换 |
| 字符串 ↔ 数字 | atoi, atof, sprintf, sscanf |
| 字符串处理(大小写等) | toupper, tolower, strtok |
| 数组元素转换 | 循环遍历 + 自定义函数或指针函数 |
| 进制转换 | 递归或循环算法 |
| 排序转换 | qsort + 自定义比较函数 |
根据具体需求选择合适的转换方式,如果需要更复杂的转换(如JSON解析、XML处理),建议使用第三方库(如cJSON)。

(图片来源网络,侵删)

(图片来源网络,侵删)
