Converti Int in caratteri ASCII in C++
- Usa l’assegnazione da Int a Char per convertire Int in caratteri ASCII
- 
          
            Usa la funzione sprintf()per convertire Int in caratteri ASCII
 
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. %de%isono sinonimi di output, ma sono diversi se usati conscanfper l’input (dove l’uso di%iinterpreterà 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). feFdifferiscono solo per il modo in cui vengono stampate le stringhe per un numero infinito o NaN (inf, infinity e nan perf; INF, INFINITY e NAN perF). | 
| e, E | doppio valore in forma standard ( d.ddde±dd). Una conversione E utilizza la letteraE(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. gusa lettere minuscole,Gusa lettere maiuscole. | 
| x, X | unsigned int come numero esadecimale. xutilizza lettere minuscole eXutilizza 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, apartire da 0x o 0X. a usa lettere minuscole,Ausa 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;
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