Cómo convertir la Int a caracteres ASCII en C++
- Usar la asignación de Int a Char para convertir Int a ASCII Char
- 
          
            Usa la función sprintf()para convertir la Int a caracteres ASCII
 
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. %dy%ison sinónimos de salida, pero son diferentes cuando se usan conscanfpara entrada (donde usando%iinterpretará 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). fyFsólo difieren en cómo se imprimen las cadenas para un número infinito o NaN (inf, infinito y nan paraf; INF, INFINITY y NAN paraF). | 
| e, E | doble valor en forma estándar ( d.ddde±dd). Una conversión E utiliza la letraE(en lugar dee) para introducir el exponente. | 
| g, G | doble en notación normal o exponencial, lo que sea más apropiado para su magnitud. gutiliza letras minúsculas,Gutiliza letras mayúsculas. | 
| x, X | sin signo int como un número hexadecimal. xusa letras minúsculas, yXusa 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;
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