Ĺadny brzuch
Jak to zrobić, aby program rozpoznawał polske znaki i po takim kodzie:
char x='k'; cout << (int)(x);//tu zwraca 107 char y='ś'; cout << (int)(y);//a tu -100!
zwrócił mi wartość znaku w unsigned int?? Trzeba tu dodać biblotekę ze zmodifikowaną tablica ASCI lub coś w tym rodzaju?
Użytkownik mor-gul edytował ten post 30 wrzesień 2006, 17:52
Generalnie wszystko działa prawidłowo i twój program zwraca właściwą wartość. Ale tobie pewnie chodzi żeby była to wartość dodatnia
a więc napisz tak:
cout<< (y&0xff);
Użytkownik Tymbark edytował ten post 30 wrzesień 2006, 15:49
Nie bardzo o to. Tu chodzi o szyfrowanie i chce miec tablice znaków z polskimi znakami. A na ASCII takowych nie maa <_< To ma być proste szyfrowanie w stylu pobieram położenie znaku w tablicy i dodaje do tego wartość klucza i wynik zapisuje jako znak leżący w tablicy pod tym numere...
Literki są typu char, a ten ma 8 bitów. Polskie znakimają kody powyżej 127. To oznacza, że najstarszy bit jest 1. Przy kodowaniu U2 jest to liczba ujemna. Rozszerzasz ją do inta, ale to rozszerzenie dopisuje jedynki aż do najstarszego bitu czwartego bajta, więc ostatecznie też zostaje liczba ujemna. To tak na marginesie. Do tego co chcesz zrobić radziłbym zrobić własną tablicę kowersji. Byłaby to tablica typu char, podobna do kodów ASCII, ale wstawisz tam też polskie znaki:
char znaki[]={'A', 'Ą','B','C','Ć',....
A wtedy szyfrowanie robisz podstawiając wartość tablicy przesuniętą o klucz. Nie jest to takie proste, jak działanie na kodach ASCII, ale cóż... w końcu mieszkamy w kraju, gdzie są takie literki :D
Też myślałem o tablicy, ale w ostateczności... Bo to troche pisania bedzie przy deklaracji i liczeniu ale jak mówisz to Polska... :P
Sensowne byłoby przekodowanie tekstu na dwubajtowy lub wielobajtowy (1 bajt na normalne znaki ASCII, 2 na rozszerzone) i zaszyfrowanie go w takiej postaci. Tylko wtedy szyfrowanie powinno być bardziej ambitne od podstawiania czegoś pod kolejne znaki ASCII.
Pozdrawiam.
No ja wiem ze to nie jest zbyt dobry szyfr. ale nie pisze go dla polskiej enigmy :P Ja sie dopiero ucze i ucze sie piszac programiki takie właśnie proste programiki.
A masz może w zanadrzu jakiegoś linka do szerszych informacji o tym algorytmie co proponujesz? Albo nazwe do googli? Bo na razie to nie bardzo go rozumiem... :unsure:
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
char x='k'; cout << (int)(x);//tu zwraca 107 char y='ś'; cout << (int)(y);//a tu -100!
zwrócił mi wartość znaku w unsigned int?? Trzeba tu dodać biblotekę ze zmodifikowaną tablica ASCI lub coś w tym rodzaju?
Użytkownik mor-gul edytował ten post 30 wrzesień 2006, 17:52
Generalnie wszystko działa prawidłowo i twój program zwraca właściwą wartość. Ale tobie pewnie chodzi żeby była to wartość dodatnia
a więc napisz tak:
cout<< (y&0xff);
Użytkownik Tymbark edytował ten post 30 wrzesień 2006, 15:49
Nie bardzo o to. Tu chodzi o szyfrowanie i chce miec tablice znaków z polskimi znakami. A na ASCII takowych nie maa <_< To ma być proste szyfrowanie w stylu pobieram położenie znaku w tablicy i dodaje do tego wartość klucza i wynik zapisuje jako znak leżący w tablicy pod tym numere...
Literki są typu char, a ten ma 8 bitów. Polskie znakimają kody powyżej 127. To oznacza, że najstarszy bit jest 1. Przy kodowaniu U2 jest to liczba ujemna. Rozszerzasz ją do inta, ale to rozszerzenie dopisuje jedynki aż do najstarszego bitu czwartego bajta, więc ostatecznie też zostaje liczba ujemna. To tak na marginesie. Do tego co chcesz zrobić radziłbym zrobić własną tablicę kowersji. Byłaby to tablica typu char, podobna do kodów ASCII, ale wstawisz tam też polskie znaki:
char znaki[]={'A', 'Ą','B','C','Ć',....
A wtedy szyfrowanie robisz podstawiając wartość tablicy przesuniętą o klucz. Nie jest to takie proste, jak działanie na kodach ASCII, ale cóż... w końcu mieszkamy w kraju, gdzie są takie literki :D
Też myślałem o tablicy, ale w ostateczności... Bo to troche pisania bedzie przy deklaracji i liczeniu ale jak mówisz to Polska... :P
Sensowne byłoby przekodowanie tekstu na dwubajtowy lub wielobajtowy (1 bajt na normalne znaki ASCII, 2 na rozszerzone) i zaszyfrowanie go w takiej postaci. Tylko wtedy szyfrowanie powinno być bardziej ambitne od podstawiania czegoś pod kolejne znaki ASCII.
Pozdrawiam.
No ja wiem ze to nie jest zbyt dobry szyfr. ale nie pisze go dla polskiej enigmy :P Ja sie dopiero ucze i ucze sie piszac programiki takie właśnie proste programiki.
A masz może w zanadrzu jakiegoś linka do szerszych informacji o tym algorytmie co proponujesz? Albo nazwe do googli? Bo na razie to nie bardzo go rozumiem... :unsure: