Przypisanie char do inta

Przypisanie char do inta
PA
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:3
0

Witam byłby ktoś w stanie wytłumaczyć mi czemu int a przyjmuje wartosc 49 zamiast 1?

Kopiuj
int a;
string b="123433";
a= b.at(0);
cout<< a;
edytowany 1x, ostatnio: pawelwuuu
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:dzień
  • Postów:1605
5

Bo string to ciąg znaków w kodowaniu ASCII, gdzie '1' == 49. Odejmij sobie od tego '0', żeby otrzymać w czytelny sposób wynik, którego szukasz.

plx211
  • Rejestracja:ponad 11 lat
  • Ostatnio:3 miesiące
  • Postów:181
0

odpowiedzią jest kodowanie, zobacz sobie na tablice: https://pl.m.wikipedia.org/wiki/ASCII

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
2

Kod ASCII, tak to jest w większości języków
https://pl.wikipedia.org/wiki/ASCII


Bo C to najlepszy język, każdy uczeń ci to powie
AK
Ale powodzenie, tempo lepsze niż na SO ;)
lion137
Pewnie dlatego, że problem banalny, z palca z telefonu;)
AK
Tam to dobra ścieżka do reputacji, masowe odpowiadanie na słabiutkie pytania
AK
Jak się poniżej okazuje, daremnie
PA
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:3
0
Althorion napisał(a):

Bo string to ciąg znaków w kodowaniu ASCII, gdzie '1' == 49. Odejmij sobie od tego '0', żeby otrzymać w czytelny sposób wynik, którego szukasz.

Nie za bardzo rozumiem, mógłbyś napisać jak to zrobić żeby rzeczywiście int był równy 1?

Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:dzień
  • Postów:1605
6

Napisałem — odjąć od tej wartości '0'.

Więc jeszcze raz, od początku — string to ciąg znaków w kodowaniu ASCII. Komputer nie trzyma w pamięci litery 'a', znaku kropki '.' czy cyfry '1', bo nie ma nawet jak. Zatem żeby to osiągnąć, zapisuje się te znaki jako liczby, w określonym kodowaniu — tutaj ASCII, do którego link masz wyżej. W nim cyfrze '0' odpowiada liczba 48, cyfrze '1' odpowiada liczba 49 itd.

Zatem jak zrobić z liczby 49 liczbę 1? Najprościej — i najczytelniej — jest odjąć od niej 48, zapisane jako '0' co należy rozumieć jako „wartość ASCII znaku wewnątrz ''”.

Czyli chcesz mieć kod w stylu:

Kopiuj
a = b.at(0) - '0';
edytowany 1x, ostatnio: Althorion
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:2 minuty
3
Althorion napisał(a):

Bo string to ciąg znaków w kodowaniu ASCII, gdzie '1' == 49. Odejmij sobie od tego '0', żeby otrzymać w czytelny sposób wynik, którego szukasz.

Odpowiedź tak nieścisła, ze aż nieprawdziwa. std::string zawiera ciąg bajtów w kodowaniu takim jakie używa program.
Standardowo powinno być to kodowanie zgodne z ustawieniami std::locale, które domyślnie jest ustawione na C, które domyślnie używa kodowania ASCII.

  • program może używać locale, ale nie musi.
  • program może ustawić inne locale domyślne niż C (np. locale systemowe std::locale::global(std::locale{""}))).

Swoja drogą problem kodowania znaków jest na tyle niezależny od języka programowania, że to powinna być obowiązkowa lektura.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.