Cum se convertește un caracter ASCII într-un int în C (Programare, C, Ascii, Caracter)

nod ninja a intrebat.

Cum pot converti un caracter ASCII într-un int în C?

Comentarii

  • C nu are un tip de date „caracter ascii”, așa că această întrebare este lipsită de sens. –  > Por Jim Balter.
  • acesta este un subiect atât de ambiguu încât înseamnă 1)’1′ la 1 SAU 2)’@’ la 64; îl caut pe primul…  > Por vincent thorpe.
8 răspunsuri
rjnilsson

Ce zici de:

int a_as_int = (int)'a';

Comentarii

  • Voi adăuga referința necesară la argument: stackoverflow.com/questions/433895/… -…  > Por xanatos.
UmmaGumma

Căutați acest lucru:

int c = some_ascii_character;

Sau pur și simplu convertiți fără atribuire:

(int)some_aschii_character;

utilizator necunoscut

Sunt de acord cu Ashot și Cwan, dar poate că vă place să convertiți un ascii-cipher ca „7” într-un int ca 7?

Atunci vă recomand:

char seven = '7';
int i = seven - '0'; 

sau, poate că veți primi un avertisment,

int i = (int) (seven - '0'); 

corectat după comentarii, mulțumesc.

Comentarii

  • Nu există niciun avertisment pentru asta în C. –  > Por Chris Lutz.
  • Dacă ar exista un avertisment, ar fi mai probabil să îl primiți pentru prima linie, care convertește un tip mai mare ('7' este un int) într-un tip mai mic (char). –  > Por Jim Balter.
Shakespear

Utilizați ASCII în numere întregi atoi() care acceptă un șir de caractere și îl convertește într-un număr întreg:

#include <stdlib.h>

int num = atoi("23"); // 23

Dacă șirul conține o zecimală, numărul va fi trunchiat:

int num = atoi("23.21"); // 23

Comentarii

  • „23” nu este un caracter ASCII, așa că acest lucru nu are nicio legătură cu întrebarea (neclară). –  > Por Jim Balter.
Jhourlad Estrella

Vă referiți la valoarea ordinală ASCII? Încearcă o distribuție de tip ca aceasta:

int x = 'a';

Comentarii

  • @Jim Balter Îmi pare rău dacă este evident, dar mă întrebam cum de este c++ spre deosebire de c. Este din cauza terminologiei sau îmi scapă ceva? –  > Por zbor.
  • @quasiverse Uită-te la editare – adică fă clic pe link-ul „43 mins ago”. Observați că comentariul meu a fost postat acum 48 de minute. Feriți-vă de acest lucru în general — vă va mușca la SO. –  > Por Jim Balter.
  • Oops, prostuțule, astea sunt orele pe care le-am văzut când am postat asta, dar bineînțeles că nu sunt orele pe care le vor vedea oamenii când îl vor citi. –  > Por Jim Balter.
Jim Balter

O valoare char în C este implicit convertibilă în int. de ex, char c; ... printf("%d", c) tipărește valoarea ASCII zecimală a lui c, , și int i = c; pune valoarea întreagă ASCII a lui c în i. Puteți, de asemenea, să o convertiți în mod explicit cu (int)c. Dacă vă referiți la altceva, cum ar fi cum să convertiți o cifră ASCII într-un int, aceasta ar fi c - '0', , care convertește implicit c într-un int și apoi scade valoarea ASCII a lui '0', , și anume 48 (în C, constantele de caractere cum ar fi '0' sunt de tip int, nu char, din motive istorice).

xanatos

Așa cum ți-au spus toți ceilalți, o poți converti direct… DOAR dacă nu vroiai să spui ceva de genul „cum pot converti un caracter ASCII Extended în valoarea sa UTF-16 sau UTF-32”. Aceasta este o întrebare TOTAL diferită (una cel puțin la fel de bună). Și una destul de dificilă, dacă îmi amintesc corect, dacă folosiți doar C „pur”. Atunci ați putea începe de aici: https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643

(pentru ASCII Extended mă refer la una dintre numeroasele „extensii” ale setului ASCII. Caracterele 0-127 din setul ASCII de bază sunt direct convertibile în Unicode, în timp ce cele 128-255 nu sunt). De exemplu, ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1 este o extensie pe 8 biți a setului ASCII pe 7 biți, sau paginile de cod (destul de celebre) 437 și 850.

Comentarii

  • Caracterele ASCII (0-127) în orice format UTF sunt identice cu reprezentarea lor în numere întregi. –  > Por Chris Lutz.
  • @Chris Dar cel puțin în 50% din cazuri, atunci când cineva vorbește de ASCII, se referă la „ASCII Extended”… Dar da, ar fi interesant să se pună această notă în răspuns. Mulțumesc. –  > Por xanatos.
  • Caracterele ASCII au o valoare cuprinsă între 0 și 127, deci convertirea lor în UTF-16 sau UTF-32 este doar o turnare. Poate că vă referiți la ceva diferit, cum ar fi convertirea diferitelor codificări de octeți, cum ar fi UTF-8, ISO 8859-1 etc. –  > Por Jim Balter.
  • „ASCII extins” este un termen prost, care nu are un referent unic, nici măcar apropiat; există numeroase codificări ASCII „extinse”, sau „pagini de cod”, așa cum le numesc unii vânzători comerciali cu mentalitate proprietară. –  > Por Jim Balter.
Ciro Santilli新疆棉花TRUMP BAN BAD

Nu este posibil cu biblioteca standard C99, , cu excepția cazului în care nu se scrie manual o hartă de la constantele de caractere la valoarea ASCII int corespunzătoare.

Constantele de caractere în C, cum ar fi 'a' nu sunt garantate a fi ASCII.

C99 oferă doar unele garanții cu privire la aceste constante, de exemplu, ca cifrele să fie contigue.

Cuvântul ASCII apare doar pe proiectul de standard C99 N1256 în notele de subsol, iar nota de subsol 173) spune:

Într-o implementare care utilizează setul de caractere US ASCII pe șapte biți, caracterele de tipărire sunt cele ale căror valori sunt cuprinse între 0x20 (spațiu) și 0x7E (tilde); caracterele de control sunt cele ale căror valori sunt cuprinse între 0 (NUL) și 0x1F (US), precum și caracterul 0x7F (DEL).

ceea ce înseamnă că ASCII nu este singura posibilitate.

Comentarii

  • Nimic din toate acestea nu este relevant pentru întrebare (al cărei sens este neclar). –  > Por Jim Balter.
  • @JimBalter mulțumesc pentru feedback. Puteți să ne indicați citatul standard corect care spune că (int)'a' == 0x61 nu este garantat și să explicați la ce se referă acest citat al meu? –  > Por Ciro Santilli新疆棉花TRUMP BAN BAD.