如何在 C++ 中把整型 Int 轉換為 Char 陣列
Jinku Hu
2023年10月12日
-
使用
std::printf
函式將int
轉換為char*
-
結合
to_string()
和c_str()
方法將int
轉換為char*
-
使用
std::stringstream
類方法進行轉換 -
使用
std::to_chars
函式將int
轉換為char*
本文將解釋如何使用不同的方法將整型 int
轉換為 char*
陣列(char*
)。
在下面的例子中,我們假設將轉換後的輸出儲存在記憶體緩衝區中,為了驗證的目的,我們將使用 std::printf
輸出結果。
使用 std::printf
函式將 int
轉換為 char*
首先,我們需要分配空間來儲存一個單一的 int
變數,我們要將其轉換到 char
緩衝區中。注意,下面的例子是為整數資料定義最大長度 MAX_DIGITS
。為了計算 char 緩衝區的長度,我們新增了 sizeof(char)
,因為 sprintf
函式會在目的地自動寫入以 \0
結束的 char 字串。因此我們應該注意為這個緩衝區分配足夠的空間。
#include <iostream>
#define MAX_DIGITS 10
int main() {
int number = 1234;
char num_char[MAX_DIGITS + sizeof(char)];
std::sprintf(num_char, "%d", number);
std::printf("num_char: %s \n", num_char);
return 0;
}
輸出:
num_char: 1234
請注意,不建議在源緩衝區和目標緩衝區重疊的情況下呼叫 sprintf
(例如 sprintf(buf, "%s some text to add", buf)
),因為它有未定義的行為,並且根據編譯器會產生不正確的結果。
結合 to_string()
和 c_str()
方法將 int
轉換為 char*
這個版本利用 std::string
類方法來進行轉換,使其比上一個例子中處理 sprintf
要安全得多。
#include <iostream>
int main() {
int number = 1234;
std::string tmp = std::to_string(number);
char const *num_char = tmp.c_str();
printf("num_char: %s \n", num_char);
return 0;
}
使用 std::stringstream
類方法進行轉換
這個方法是用 std::stringstream
類實現的。也就是說,我們建立一個臨時的基於字串的流,在這裡儲存 int
資料,然後通過 str
方法返回字串物件,最後呼叫 c_str
進行轉換。
#include <iostream>
#include <sstream>
int main() {
int number = 1234;
std::stringstream tmp;
tmp << number;
char const *num_char = tmp.str().c_str();
printf("num_char: %s \n", num_char);
;
return 0;
}
使用 std::to_chars
函式將 int
轉換為 char*
這個版本是在 C++17 中新增的一個純 C++ 風格的函式,定義在標題 <charconv>
中。另外,這個方法提供了對範圍的操作,這可能是特定場景下最靈活的解決方案。
#include <charconv>
#include <iostream>
#define MAX_DIGITS 10
int main() {
int number = 1234;
char num_char[MAX_DIGITS + sizeof(char)];
std::to_chars(num_char, num_char + MAX_DIGITS, number);
std::printf("num_char: %s \n", num_char);
return 0;
}
作者: Jinku Hu
相關文章 - C++ Integer
- C++ 中的 INT_MAX 和 INT_MIN 巨集表示式
- 在 C++ 中計算一個數字的位數
- 在 C++ 中檢查一個數字是否為質數
- 在 C++ 中檢查輸入是否為整數
- 如何在 C++ 中從字串中解析整數
- 如何在 C++ 中將 Int 轉換為 ASCII 字元