Como Converter Int para ASCII Char em C++

Jinku Hu 12 outubro 2023
  1. Use Int to Char Assignment para Converter Int to ASCII Char
  2. Utilize sprintf() Função para Converter Int em ASCII Char
Como Converter Int para ASCII Char em C++

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 %d e o %i são sinônimos de saída, mas são diferentes quando utilizados com o scanf para entrada (onde utilizar %i interpretará 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 f e F diferem apenas em como as strings para um número infinito ou NaN são impressas (inf, infinity e nan para f; INF, INFINITY e NAN para F).
e, E valor duplo na forma padrão (d.ddde±dd). Uma conversão E utiliza a letra E (em vez de e) para introduzir o expoente.
g, G dobrar em notação normal ou exponencial, o que for mais apropriado para sua magnitude. O g utiliza letras minúsculas, o G utiliza letras maiúsculas.
x, X int não assinado como um número hexadecimal. O x utiliza letras minúsculas, e o X utiliza 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;
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

Artigo relacionado - C++ Integer