C++에서 Int를 Char Array로 변환하는 방법

Jinku Hu 2023년10월12일
  1. std::sprintf 기능을 사용하여 intchar*로 변환
  2. to_string()과 c_str()의 int를 char*로 변환하는 방법의 조합
  3. 변환에 std::stringstream 클래스 방법 사용
  4. std::to_chars 기능을 사용하여 “int"를 “char*“로 변환
C++에서 Int를 Char Array로 변환하는 방법

이 글에서는 int를 char 어레이(char*)로 변환하는 방법에 대해 설명한다.

다음 예에서는 변환 인메모리 버퍼의 출력을 저장한다고 가정하고, 검증을 위해 std::printf로 결과를 출력한다.

std::sprintf 기능을 사용하여 intchar*로 변환

우선 char 버퍼로 변환할 단일 int 변수를 저장하기 위해 공간을 할당해야 한다. 다음 예제는 정수 데이터에 대한 최대 길이 MAX_DIGITS를 정의하는 것에 주목하십시오. char 버퍼 길이를 계산하기 위해 sprintf 함수는 목적지에서 자동으로 종료되는 char 문자열을 쓰기 때문에 sizeof(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

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Integer

관련 문장 - C++ Char