Rzutowanie za pomocą funkcji reinterpret_cast

Stronę tą wyświetlono już: 47 razy

Funkcja szablonowa reinterpret_cast umożliwia rzutowanie wskaźnika jednego typu na drugi. Takie rzutowanie konieczne jest np. gdy dane są ściągane z internetu w postaci ciągu znaków char a przesyłane dane są innego typu np. typu prostego int lub typu strukturalnego. Oto przykład rzutowania tego typu:

Listing 1
  1. char data[] = "somedata";
  2. int *dataInt = reinterpret_cast<int*>(data);
  3. std::cout << "Data " << dataInt[0] << std::endl;
  4. dataInt[1] = 90;
  5. std::cout << "Data " << dataInt[1] << std::endl;
  6. std::cout << data;

W powyższym kodzie zmienna data zawiera dane w postaci tablicy znaków. Tablica ta składa się z 9-ciu elementów (tekst + znak 0 (czyli znacznik końca tekstu). Następnie zachodzi reinterpretacja wskaźnika char* na int*. W linijce 3 zmiana wartości stojącej za drugim indeksem uzyskanego wskaźnika powoduje zmianę zawartości zmiennej data. Ponieważ int ma rozmiar czterech bajtów to zmienna dataInt wskazuje na początek tablicy dwuelementowej typu int.

Wynik działania powyższego kodu będzie więc następujący:

Data 1701670771
Data 90
someZ4

Komentarze