Converti Int in caratteri ASCII in C++

Jinku Hu 12 ottobre 2023
  1. Usa l’assegnazione da Int a Char per convertire Int in caratteri ASCII
  2. Usa la funzione sprintf() per convertire Int in caratteri ASCII
Converti Int in caratteri ASCII in C++

Questo articolo spiegherà diversi metodi su come convertire int in caratteri ASCII in C++.

Usa l’assegnazione da Int a Char per convertire Int in caratteri ASCII

La codifica dei caratteri ASCII è specificata in un formato a 7 bit. Pertanto, ci sono 128 caratteri univoci, ogni mappatura al valore numerico corrispondente da 0 a 127.

Poiché il linguaggio di programmazione C implementava i tipi char come numeri sotto il cofano, possiamo assegnare una variabile int a una variabile di tipo char e trattarla come il carattere ASCII corrispondente. Ad esempio, trasferiamo direttamente i valori dal vettore int al vettore char e poi li emettiamo usando il metodo std::copy, visualizzando i caratteri ASCII come previsto.

Notare che l’assegnazione al tipo char funziona solo quando il valore int corrisponde a un codice ASCII e.i. è compreso tra 0 e 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;
}

Produzione:

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

In alternativa, possiamo produrre direttamente i valori int come caratteri ASCII usando la funzione printf. printf accetta l’identificatore di formato per l’argomento di tipo corrispondente come mostrato nella tabella seguente.

Specifier Descrizione
% Stampa un carattere letterale % (questo tipo non accetta alcun campo di flag, larghezza, precisione, lunghezza).
d, i int come numero intero con segno. %d e %i sono sinonimi di output, ma sono diversi se usati con scanf per l’input (dove l’uso di %i interpreterà un numero come esadecimale se è preceduto da 0x e ottale se è preceduto da 0.)
u Stampa int decimale senza segno.
f, F double in notazione normale (a virgola fissa). f e F differiscono solo per il modo in cui vengono stampate le stringhe per un numero infinito o NaN (inf, infinity e nan per f; INF, INFINITY e NAN per F).
e, E doppio valore in forma standard (d.ddde±dd). Una conversione E utilizza la lettera E (anziché e) per introdurre l’esponente.
g, G raddoppia in notazione normale o esponenziale, a seconda di quale sia più appropriato per la sua grandezza. g usa lettere minuscole, G usa lettere maiuscole.
x, X unsigned int come numero esadecimale. x utilizza lettere minuscole e X utilizza lettere maiuscole.
o unsigned int in ottale.
s stringa con terminazione null.
c char (carattere).
p void* (puntatore a void) in un formato definito dall’implementazione.
a, A double in notazione esadecimale, a partire da 0x o 0X. a usa lettere minuscole, A usa lettere maiuscole.
n Non stampa nulla, ma scrive il numero di caratteri scritti con successo fino a quel momento in un parametro puntatore intero.
#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;
}

Produzione:

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

Usa la funzione sprintf() per convertire Int in caratteri ASCII

La funzione sprintf è un altro metodo per convertire i valori int in caratteri. Dobbiamo dichiarare una variabile char per contenere il valore convertito. Questa variabile viene passata come primo argomento a sprintf e il terzo parametro specifica il numero da elaborare. Infine, dovresti fornire uno degli specificatori di formato come con printf, indica il tipo in cui il valore verrà convertito.

#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;
Autore: 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

Articolo correlato - C++ Integer