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
![Converti Int in caratteri ASCII in C++](/img/Cpp/feature-image---How-to-convert-int-to-ASCII-char.webp)
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;
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