如何在 C++ 中把整型 Int 轉換為 Char 陣列

Jinku Hu 2023年10月12日
  1. 使用 std::printf 函式將 int 轉換為 char*
  2. 結合 to_string()c_str() 方法將 int 轉換為 char*
  3. 使用 std::stringstream 類方法進行轉換
  4. 使用 std::to_chars 函式將 int 轉換為 char*
如何在 C++ 中把整型 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
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Integer

相關文章 - C++ Char