Como Converter Int para ASCII Char em C++
- Use Int to Char Assignment para Converter Int to ASCII Char
- 
          
            Utilize sprintf()Função para Converter Int em ASCII Char
 
Este artigo explicará vários métodos de como converter int para ASCII char C++.
Use Int to Char Assignment para Converter Int to ASCII Char
A codificação de caracteres ASCII é especificada em um formato de 7 bits. Assim, existem 128 caracteres únicos, cada mapeamento para o valor numérico correspondente de 0 a 127.
Uma vez que a linguagem de programação C implementou os tipos char como números abaixo do capô, podemos atribuir uma variável int a uma variável do tipo char e tratá-la como o caractere ASCII correspondente. Por exemplo, empurramos diretamente valores do vetor int para o vetor char e então os emitimos utilizando o método std::copy, exibindo caracteres ASCII como esperado.
Observe que atribuir ao tipo char somente funciona quando o valor int corresponde a um código ASCII, ou seja, está na faixa de 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 emitir diretamente os valores int como caracteres ASCII utilizando a função printf. O printf toma o especificador de formato para o argumento de tipo correspondente, como mostrado na tabela a seguir.
| Especificador | Descrição | 
|---|---|
| % | Imprime um caracter literal %(este tipo não aceita nenhuma bandeira, largura, precisão, campos de comprimento). | 
| d, i | int como um número inteiro assinado. O %de o%isão sinônimos de saída, mas são diferentes quando utilizados com oscanfpara entrada (onde utilizar%iinterpretará um número como hexadecimal se for precedido por 0x, e octal se for precedido por 0). | 
| u | Imprimir int. decimal sem assinatura. | 
| f, F | duplo em notação normal (ponto fixo). As notações feFdiferem apenas em como as strings para um número infinito ou NaN são impressas (inf, infinity e nan paraf; INF, INFINITY e NAN paraF). | 
| e, E | valor duplo na forma padrão ( d.ddde±dd). Uma conversão E utiliza a letraE(em vez dee) para introduzir o expoente. | 
| g, G | dobrar em notação normal ou exponencial, o que for mais apropriado para sua magnitude. O gutiliza letras minúsculas, oGutiliza letras maiúsculas. | 
| x, X | int não assinado como um número hexadecimal. O xutiliza letras minúsculas, e oXutiliza letras maiúsculas. | 
| o | int não assinado em octal. | 
| s | string com termo nulo. | 
| c | char (caractere). | 
| p | void*(ponteiro para anular) em um formato definido pela implementação. | 
| a, A | dupla em notação hexadecimal, começando com 0x ou 0X. a utiliza letras minúsculas, A utiliza letras maiúsculas. | 
| n | Imprime nada, mas escreve o número de caracteres escritos com sucesso até agora em um parâmetro de ponteiro inteiro. | 
#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;
Utilize sprintf() Função para Converter Int em ASCII Char
A função sprintf é outro método para converter valores int em caracteres. Devemos declarar uma variável char para manter o valor convertido. Esta variável é passada como o primeiro argumento para sprintf e o terceiro parâmetro especifica o número a ser processado. Finalmente, você deve fornecer um dos especificadores de formato como com printf, ele indica o tipo para o qual o valor será convertido.
#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