Napisałem taki kod, w którym następuje rzutowanie z int na char według starego, tradycyjnego sposobu:
#include
using namespace std;
int main()
{
int duzy = 0xffff;
char maly;
maly = (char) duzy;
cout << maly;
cout << "\n\n\n\n\n\n\n\n\n\n";
system("pause");
}
W zmiennej maly powinna znaleźć się wartość 0xff (czyli 255), ponieważ nastąpiło “obcięcie” 8 bitów - char jest w stanie pomieścić tylko jeden bajt. Dlaczego, jeśli kompiluje program, w miejscu gdzie powinna wyświetlić się wartość 255 (cout << maly;), nic się nie pojawia :? :?: Jest taka możliwość, że nowe kompilatory ignorują “stare” sposoby rzutowania (mam Microsoft Visual C++ 2008 Express Edition) :?:
Zauważ, że nie wyświetlasz liczby, tylko znak. Wyświetla się znak o kodzie 255, czyli coś bliżej niezdefiniowanego. Ja dostaję znak: ‘�’. (pytajnik w rombie)
Spróbuj z cout << “|” << maly << “|” << endl;, powinna być rożnica.
Nom, to jest fakt… Bo gdy inną jakąś liczbę będziesz rzutował, to ci wyjdzie jej odpowiednik w kodzie ASCII np jeśli będziesz rzutował liczbę 100 to wyświetli ci d.
Jedyne co mogę zrobić, co polecić taki ot mały sposób zamiast rzutowania. Tylko wtedy jest problem z liczbami w systemie heksadecymalnym, więc korzystniej jest pisać po prostu normalnie Oto ten sposób:
#include
#include
#include
using namespace std;
int main()
{
int duzy = 255;
ostringstream ostr;
ostr << duzy;
string maly;
maly = ostr.str();
cout << maly;
cout << "\n\n\n\n\n\n\n\n\n\n";
system("pause");
}
Po pierwsze nie “unsigned maly=duzy;” zaś “unsigned char maly=duzy;” zamiast “char maly=duzy;”.
Po drugie nie rozumiem czego rozwiązanie chcesz uzyskać, nie postawiono konkretnego problemu, jedynie było pytanie czemu tak się dzieje, na to pytanie wg mnie konkretnie odpowiedziałem.