• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konwersja char do int na systemach, które nie używają ASCII

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
139 wizyt
pytanie zadane 23 lutego w C i C++ przez whiteman808 Gaduła (4,760 p.)
Wczytuję różne znaki od użytkownika za pomocą char ch; std::cin >> ch; w pętli (lub odpowiednika z getchar w C)

Jak zapewnić przenośną konwersję danych w ch na typ int, jeśli użytkownik wpisze znak będący liczbą, która uwzględniałaby systemy nie używające ASCII, odpowiednio w C i w C++?

Czy jest sens przejmować się tego typu konwersjami przy pisaniu programów, które mają coś robić więcej na poważnie niż być prostymi programikami pisanymi w ramach hobby?

1 odpowiedź

+2 głosów
odpowiedź 23 lutego przez Gynvael Coldwind Nałogowiec (30,510 p.)
Współcześnie wszystko używa Unicode, które jest kompatybilne z pierwszymi 128 znakami ASCII, w tym z cyframi. Co za tym idzie, w praktyce nie musisz się tym przejmować.

Co za tym idzie, o tą konkretną rzecz trzeba zadbać tylko wtedy, kiedy się wie, że się będzie przetwarzać dane pochodządze z jakiegoś innego systemu, który korzysta z innego (niekompatybilnego z ASCII jeśli chodzi o cyfry) kodowania, lub jeśli wiemy, że program będzie działał na takim innym systemie (a to zdecydowanie będziemy wiedzieć, bo to będzie jakiś bardzo archaiczny system/komputer).
1
komentarz 23 lutego przez Oscar Nałogowiec (29,360 p.)

Chyba nie istniał system kodowania, w którym cyfry nie stanowiłyby ciągłego uporządkowanego zbioru czyli wyrażenie typu c - '0' dla każdej cyfry dziesiętnej daje prawidłowy wynik w postaci wartości liczbowej danej cyfry. To zadziała nawet na Odrze, gdzie kody znaków były 6-bitowe a '0' miało kod 0.

PS. Nie pisałem w C na Odrze, tylko w Pascalu i PLAN-ie (asembler)

komentarz 23 lutego przez Gynvael Coldwind Nałogowiec (30,510 p.)

Ach, zgoda. Miałem c - 0x30 w głowie jak odpisywałem.

Jak znam życie, to pewnie było jakieś dziwne egzotyczne kodowanie, gdzie było 1-9 a potem 0. Żeby daleko nie szukać scankody klawiatury tak mają (https://www.millisecond.com/support/docs/current/html/language/scancodes.htm).

komentarz 23 lutego przez Oscar Nałogowiec (29,360 p.)
Scankody klawiatury w ogóle są (były) według fizycznego rozmieszczenia klawiszy a nie kodów znaków.

Niekolejne zakodowanie cyfr albo liter skomplikowałoby sortowanie, co w tamtych czasach oznaczałoby droższy komputer (kolejne bramki w procesorze) lub dłuższy i wolniejszy program sortujący.

Podobne pytania

0 głosów
1 odpowiedź 2,949 wizyt
0 głosów
0 odpowiedzi 721 wizyt
pytanie zadane 22 lutego 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)
0 głosów
1 odpowiedź 882 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)

93,440 zapytań

142,434 odpowiedzi

322,681 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...