首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C/C++數值類型與字符串互轉全攻略:int/long/float/double雙向轉換

     編輯:關於C語言

一、數值 → 字符串

方法 1:itoa / ltoa(C風格,非標準但廣泛支持)

#include <stdlib.h>
int a = 3;
long b = 23;
char buf1[30], buf2[30];
itoa(a, buf1, 10);  // buf1 = "3"
ltoa(b, buf2, 10);  // buf2 = "23"

第三參數為進制(10=十進制,16=十六進制等)。

方法 2:sprintf(標準、通用、格式化強)

#include <stdio.h>
int a = 3;
float b = 4.2f;
char buf[30];
sprintf(buf, "%d,%f", a, b);  // buf = "3,4.200000"

格式控制同 printf,支持寬度、精度、進制等豐富格式。

方法 3:ostringstream(C++流風格,類型安全)

#include <sstream>
#include <string>
using namespace std;

int a = 3;
float b = 4.2f;
ostringstream oss;
oss << a << "," << b;
string s = oss.str();  // s = "3,4.2"

類似 cout,自動處理類型轉換,無格式字符串風險。

二、字符串 → 數值

方法 1:atoi / atol / atof(簡單,無錯誤檢查)

#include <stdlib.h>
int a = atoi("32");
long b = atol("333");
double c = atof("23.4");

轉換失敗返回 0,無法區分 "0" 與非法輸入。

方法 2:strtol / strtod(標準、可檢錯、支持進制)

#include <stdlib.h>
char *endptr;
long b = strtol("333", &endptr, 10);  // 10=十進制
double c = strtod("32.3", &endptr);

endptr 指向首個未轉換字符,可檢測輸入合法性。

方法 3:sscanf(格式化掃描,功能強)

#include <stdio.h>
int a; float b;
sscanf("23 23.4", "%d %f", &a, &b);

返回成功轉換項數,支持複雜格式匹配。

方法 4:istringstream(C++流風格,類型安全)

#include <sstream>
#include <string>
using namespace std;

int a; float b;
istringstream iss("23 23.4");
iss >> a >> b;

可檢查流狀態 iss.fail() 判斷轉換成敗。

選擇建議

場景推薦方法理由
C代碼、簡單整數轉字符串itoa / sprintf輕量、兼容性好
C++代碼、追求類型安全ostringstream / istringstream無格式字符串漏洞、自動類型推導
需要錯誤檢查、進制轉換strtol / strtod標準庫提供完整錯誤信息
複雜格式解析sscanf格式字符串表達力強

注意事項

  • 緩衝區大小預留充足(含終止符 \0)
  • 浮點數精度:sprintf 默認 6 位小數,可用 %.2f 控制
  • 線程安全:strtok 類函數非線程安全,轉換函數多為線程安全
  • C++11 新增 to_string / stoi 等更現代化接口
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved