Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zawartość stringa przechowującego polski znak - ujemny char

Ostatnio zmodyfikowano 2013-12-30 20:22
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
Zawartość stringa przechowującego polski znak - ujemny char
» 2013-12-30 14:59:48
Witajcie. Próbuję rozwikłać jedną rzecz. Jak wiadomo typ char przechowuje wartości liczbowe od 0 do 255. Dlaczego więc, gdy zapiszę w pliku zakodowanym w ANSI znak "Ą" po czym go pobiorę do stringa, to string zawiera dokładnie jeden znak (długość stringa wynosi 1) a rzutowanie tego znaku na inta przekazuje wartość -91. Dlaczego -91 skoro char powinien przechowywać wartości unsigned ? A gdy zakoduję w UTF-8 i go pobiorę do stringa (albo gdy zapiszę po prostu jako stałą dosłowną, bo edytor w IDE mam też kodowany jako UTF-8) to string przechowuje dwa znaki (długość stringa wynosi 2) i te znaki rzutowane na int, przekazują wartości odpowiednio : -60 i -124 (dla znaku "Ą"). Te same pytanie, jak char dopuszcza znaki ujemne ?
P-100644
SeaMonster131
» 2013-12-30 15:10:56
Jak wiadomo typ char przechowuje wartości liczbowe od 0 do 255

» Kurs C++ » Poziom 1Pojęcie zmiennej i podstawowe typy danych lekcja

char: od -128 do 127
unsigned char: od 0 do 255
P-100645
McAffey
Temat założony przez niniejszego użytkownika
» 2013-12-30 15:15:58
Dzięki, a wydawało mi się że każdy jest unsigned, jeszcze w dodatku na szybko sprawdziłem w google jednak na stronie na której było błędne info http://4programmers.net/C/Char.

Edit : a dlaczego są wartości -60 i -124 (dla "Ą") gdy "Ą" w Unicode to dziesiętnie Ą a szesnastkowo Ą ? Jak to odnieść ?
P-100648
Elaine
» 2013-12-30 15:30:09
a dlaczego są wartości -60 i -124 (dla "Ą") gdy "Ą" w Unicode to dziesiętnie Ą a szesnastkowo Ą ? Jak to odnieść ?
W UTF-8 0xC4 0x84 to U+0104 LATIN CAPITAL LETTER A WITH OGONEK.
P-100651
McAffey
Temat założony przez niniejszego użytkownika
» 2013-12-30 15:50:16
http://www.fileformat.info​/info/unicode/char/0104​/index.htm nie rozumiem, to 0xC4 czy 0x84 ? Czy są dwie reprezentacje "Ą" ? No i jak to odnieść do "-60 i -124", skoro tak pokazuje znak zakodowany w UTF-8 ?
P-100655
pekfos
» 2013-12-30 16:36:34
to 0xC4 czy 0x84 ?
0xC4 i 0x84.

No i jak to odnieść do "-60 i -124
0xC4 typu char, to -60.
P-100661
Elaine
» 2013-12-30 19:20:12
nie rozumiem, to 0xC4 czy 0x84 ? Czy są dwie reprezentacje "Ą" ?
Nie, jest jedna, dwa bajty: 0xC4 0x84.
W UTF-8 każdy znak zapisywany jest na od jednym do czterch bajtów:
Znaki od U+0000 do U+007F zapisywane są na jednym bajcie, np.: U+0061 LATIN SMALL LETTER A to 0x61
Znaki od U+0080 do U+07FF zapisywane są na dwóch bajtach, np.: U+0419 CYRILLIC CAPITAL LETTER SHORT I to 0xD0 0x99
Znaki od U+0800 do U+FFFF zapisywane są na trzech bajtach, np.: U+2C97 COPTIC SMALL LETTER LAULA to 0xE2 0xB2 0x97
Znaki od U+10000 do U+10FFFF zapisywane są na czterech bajtach, np.: U+1F596 RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS to 0xF0 0x9F 0x96 0x96

U+0104 LATIN CAPITAL LETTER A WITH OGONEK należy do drugiego zakresu, więc wymaga dwóch bajtów.
P-100682
McAffey
Temat założony przez niniejszego użytkownika
» 2013-12-30 20:22:27
No tak, dzięki wielkie, już wszystko jasne :)

Jeszcze dla przyszłych czytających, gdyby się zastanawiali jak interpretować zdanie

0xC4 typu char, to -60.
to wystarczy
( int )( char( 0x84 ) );

Tak samo 0x84 typu char, to -124.

Już wszystko rozumiem, jeszcze raz dzięki za pomoc :)
P-100697
« 1 »
  Strona 1 z 1