[C++] Zapisywanie znaku ASCII liczbowo


(Jooooooozek) #1

cześć.

Czytam "Symfonię C++" i jest tam napisane, że znaki ASCII można zapisywać bezposrednio czyli liczbowo. Kod znaku miedzy apostrofami musi być w zapisie ósemkowym lub heksadecymalnym. Ale poza apostrofami może być też dziesiętny prawda ? I też sprawdziłem, że program skompiluje się jeżeli zamiast:

char z1 = '0141',z2 = 'x61'; [/code]

dam tak:

[code=php]char z1 = 0141,z2 = 0x61; 



Te zapisy niczym się nie różnią, prawda ?

(Xwars) #2

Nie było by łatwiej sprawdzić w kompilatorze zamiast tutaj pisać? :stuck_out_tongue:

Z zapisem liczbowym jest wszystko ok, błąd masz w zapisie z apostrofami, powinno być tak:

z1 = '\141', z2 = '\x61'

To co miałeś kompilowało się tylko przypadkiem i wyrzuca warningi.


(Jooooooozek) #3

Sprawdziłem i działa. Pisząc tutaj pomyliłem się - miało być z1 = '\0141'.

Powtórzę moje pytanie znowu - po co wymyślono takie dwa zapisy skoro niczym się one nie różnią:

char znak = '\x61';

char znak = 0x61;

(Sawyer47) #4

Te wartości różnią się typem

#include 


int main()

{

	static_assert(std::is_same::value, "0x61 to int");

	static_assert(std::is_same::value, "'\\0x61' to char");

	return 0;

}

Pierwszy zapis to rzutowanie 61 na char, a drugi to po prostu stała znakowa. Ten drugi zapis nabiera jeszcze większego znaczenia w literałach łańcuchowych.