整理 Windows/Linux 下 C/C++ 常見類型轉換代碼片段,涵蓋整數、浮點數、字串、字元陣列、枚舉等互轉,方便查閱。
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
#include <cstring>
int main() {
// 1. int -> char[]
int tmp1 = 100; char ch1[15]; sprintf(ch1, "%d", tmp1);
std::cout << ch1 << std::endl;
// 2. int -> string
int tmp2 = 111; char ch2[15]; sprintf(ch2, "%d", tmp2);
std::string str2 = std::string(ch2);
std::cout << str2 << std::endl;
// 3. int -> enum
enum Enum3 { A, B }; int tmp3 = 222;
Enum3 val3 = static_cast<Enum3>(tmp3);
std::cout << val3 << std::endl;
// 4. char[] -> string
char arr4[] = "this is a sample";
std::string str4 = std::string(arr4);
std::cout << str4 << std::endl;
// 5. char -> int ('0'~'9')
char ch5 = '8'; int val5 = ch5 - '0';
std::cout << val5 << std::endl;
// 6. char[] -> int
char arr6[] = "12345"; int tmp6; sscanf(arr6, "%d", &tmp6);
std::cout << tmp6 << std::endl;
// 7. char* -> int
char* pch7 = "444"; int tmp7 = atoi(pch7);
std::cout << tmp7 << std::endl;
// 8. char* -> float
char* pch8 = "55.5"; float tmp8 = (float)atof(pch8);
std::cout << tmp8 << std::endl;
// 9. char* -> double
char* pch9 = "66.666"; double tmp9 = atof(pch9);
std::cout << tmp9 << std::endl;
// 10. float -> char[]
float tmp10 = 11.11f; char ch10[20]; sprintf(ch10, "%f", tmp10);
std::cout << ch10 << std::endl;
// 11. int -> char*
int tmp11 = 777; char ch11[20]; sprintf(ch11, "%d", tmp11);
char* pch11 = ch11; std::cout << pch11 << std::endl;
// 12. double -> char[]
double tmp12 = 8.888; char arr12[20]; sprintf(arr12, "%f", tmp12);
std::cout << arr12 << std::endl;
// 13. char* -> string
char* pch13 = "hello, world"; std::string str13 = std::string(pch13);
std::cout << str13 << std::endl;
// 14. string -> char[]
std::string str14 = "dog, cat"; char arr14[255];
strncpy(arr14, str14.c_str(), sizeof(arr14));
arr14[sizeof(arr14)-1] = 0; std::cout << arr14 << std::endl;
// 15. string -> const char*
std::string str15 = "ha ha"; const char* pch15 = str15.c_str();
std::cout << pch15 << std::endl;
// 16. float -> int (截斷/四捨五入)
float ftmp16 = 99.99f; int tmp16 = static_cast<int>(ftmp16); // 或 +0.5 四捨五入
std::cout << tmp16 << std::endl;
return 0;
}
sprintf/sscanf 需確保緩衝區足夠大,防止溢位。atoi/atof 錯誤輸入行為未定義,建議用 strtol/strtod 做嚴格檢查。static_cast 用於相關類型轉換,reinterpret_cast 用於指標/整數強轉。\0。