Przypisanie char do inta

0

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

int a;
string b="123433";
a= b.at(0);
cout<< a;
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.

0

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

2

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

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?

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:

a = b.at(0) - '0';
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1