Cómo convertir la Int a caracteres ASCII en C++

Jinku Hu 12 octubre 2023
  1. Usar la asignación de Int a Char para convertir Int a ASCII Char
  2. Usa la función sprintf() para convertir la Int a caracteres ASCII
Cómo convertir la Int a caracteres ASCII en C++

Este artículo explicará varios métodos de cómo convertir int a ASCII char C++.

Usar la asignación de Int a Char para convertir Int a ASCII Char

La codificación de caracteres ASCII se especifica en un formato de 7 bits. Así, hay 128 caracteres únicos, cada uno de los cuales se asigna al valor numérico correspondiente de 0 a 127.

Dado que el lenguaje de programación C implementó los tipos char como números bajo el capó, podemos asignar una variable int a una variable de tipo char y tratarla como el correspondiente carácter ASCII. Por ejemplo, empujamos directamente los valores del vector int al vector char y luego los emitimos usando el método std::copy, mostrando los caracteres ASCII como se espera.

Note que asignar al tipo char sólo funciona cuando el valor int corresponde a un código ASCII, es decir, está en el rango 0-127.

#include <array>
#include <iostream>
#include <iterator>
#include <vector>

using std::array;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> numbers{97, 98, 99, 100, 101, 102, 103};
  vector<char> chars{};

  std::copy(numbers.begin(), numbers.end(),
            std::ostream_iterator<int>(cout, "; "));

  chars.reserve(numbers.size());
  for (auto &number : numbers) {
    chars.push_back(number);
  }
  cout << endl;
  std::copy(chars.begin(), chars.end(),
            std::ostream_iterator<char>(cout, "; "));

  return EXIT_SUCCESS;
}

Resultado:

97; 98; 99; 100; 101; 102; 103;
a; b; c; d; e; f; g;

Alternativamente, podemos dar salida directamente a los valores int como caracteres ASCII usando la función printf. printf toma el especificador de formato para el correspondiente argumento de tipo como se muestra en la siguiente tabla.

Especificador Descripción
% Imprime un carácter literal % (este tipo no acepta ningún campo de bandera, ancho, precisión, longitud).
d, i int como un entero firmado. %d y %i son sinónimos de salida, pero son diferentes cuando se usan con scanf para entrada (donde usando %i interpretará un número como hexadecimal si está precedido por 0x, y octal si está precedido por 0.)
u Imprimir int decimal sin firmar.
f, F doble en notación normal (punto fijo). f y F sólo difieren en cómo se imprimen las cadenas para un número infinito o NaN (inf, infinito y nan para f; INF, INFINITY y NAN para F).
e, E doble valor en forma estándar (d.ddde±dd). Una conversión E utiliza la letra E (en lugar de e) para introducir el exponente.
g, G doble en notación normal o exponencial, lo que sea más apropiado para su magnitud. g utiliza letras minúsculas, G utiliza letras mayúsculas.
x, X sin signo int como un número hexadecimal. x usa letras minúsculas, y X usa mayúsculas.
o sin firmar en octal.
s de una cadena con terminación nula.
c char (carácter).
p void* (puntero para anular) en un formato definido por la implementación.
a, A doble en notación hexadecimal, comenzando con 0x o 0X. a utiliza letras minúsculas, A utiliza letras mayúsculas.
n No imprime nada, pero escribe el número de caracteres escritos con éxito hasta ahora en un parámetro de puntero entero.
#include <array>
#include <charconv>
#include <iostream>
#include <iterator>
#include <vector>

using std::array;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> numbers{97, 98, 99, 100, 101, 102, 103};
  vector<char> chars{};

  for (const auto &number : numbers) {
    printf("%c; ", number);
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

a; b; c; d; e; f; g;

Usa la función sprintf() para convertir la Int a caracteres ASCII

La función sprintf es otro método para convertir los valores int a caracteres. Debemos declarar una variable char para mantener el valor convertido. Esta variable se pasa como primer argumento a sprintf y el tercer parámetro especifica el número a procesar. Finalmente, debes proporcionar uno de los especificadores de formato como con printf, que indica el tipo al que se convertirá el valor.

#include <array>
#include <charconv>
#include <iostream>
#include <iterator>
#include <vector>

using std::array;
using std::copy;
using std::cout;
using std::endl;
using std::to_chars;
using std::vector;

int main() {
  vector<int> numbers{97, 98, 99, 100, 101, 102, 103};

  array<char, 5> char_arr{};
  for (auto &number : numbers) {
    sprintf(char_arr.data(), "%c", number);
    printf("%s; ", char_arr.data());
  }
  cout << endl;

  return EXIT_SUCCESS;
}
a; b; c; d; e; f; g;
Autor: 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

Artículo relacionado - C++ Integer