• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Problem z rzutowaniem

Object Storage Arubacloud
0 głosów
237 wizyt
pytanie zadane 29 lipca 2015 w C i C++ przez Patrycjerz Mędrzec (192,320 p.)
zamknięte 9 sierpnia 2015 przez Patrycjerz

Witam,

czytając nad wyraz ciekawy artykuł: http://4programmers.net/C/Artyku%C5%82y/Odczyt_i_zapis_plik%C3%B3w_binarnych_w_Cpp, który polecił mi jeden z forumowiczów, natrafiłem na jeden problem. Otóż rzutowanie przedstawione w tekście, czyli np.:

char* temp = new char[sizeof(float)];
//...
float* number2 = (float*)(temp);

działa bezproblemowo, ale jak chcę zrobić to wg standardów C++, czyli:

char* temp = new char[sizeof(float)];
//...
float* number2 = static_cast<float*>(temp);

to wypisuje, że nie można wykonać rzutowania. W czym robię błąd? Ktoś może powiedzieć, że jeśli jedno mi działa, to jaki mam problem, bo mogę użyć drugiego, ale chcę korzystać właśnie z tego operatora.

Za odpowiedzi będę bardzo wdzięczny.

 

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 29 lipca 2015 przez nowyfolder Mądrala (7,250 p.)
edycja 29 lipca 2015 przez nowyfolder
 
Najlepsza

Dzieje sie tak ponieważ static_cast nie wykonuje takich rzutowań, reinterpret_cast powinien łyknąć bez problemu.
Jak mówi nam zawsze chętna do dzielenia się wiedzą Pani dokumentacja:

static_cast może:

- rzutować we wszystkie domyślnie dostępne sposoby rzutowania, oraz na odwrót(short - > long, long -> short)
- rzutować wskaźniki na klasy w górę i w dół

- rzutować void* na inny wskaźnik

- rzutować różne rodzaje typów liczbowych i enumy na enumy

- i kilka mniej istotnych rzeczy z naszego punktu widzenia

Jak widać mozna rzutować wskaźniki z void* na dowolny wskaźnik, ale nie można bezpośrednio rzutować pomiędzy 2 innymi wskaźnikami

 

Z kolei reinterpret-cast może dodatkowo:

- rzutować każdy wskaźnik na każdy inny
- rzutować powiędzy liczbami i wskaźnikami

Oczywiście polecam samemu przejrzeć odpowiednie wsparcie od Pani dokumentacji:

http://www.cplusplus.com/doc/tutorial/typecasting/

komentarz 29 lipca 2015 przez nowyfolder Mądrala (7,250 p.)

Ciężko się rozwiązuje problemy o 2 w nocy, dlatego tym bardziej zasługuję na szacunek xD
Masz po prostu procesor Intela, który zapisuje dane jako Little Endian(poczytaj o tym, mi sie spać chce :P https://pl.wikipedia.org/wiki/Kolejno%C5%9B%C4%87_bajt%C3%B3w), czyli jak masz Inta, to pierwszy bajt jest na końcu, a osttani na początku :P, Wskaźnik i wskazuje na inta, a jako że int na tej architekturze jest zapisywany od tyłu do przodu to progam uważa, że trafił na liczbę 2A 00 00 00 czyli na.. uwaga! 704643072

komentarz 29 lipca 2015 przez nowyfolder Mądrala (7,250 p.)
Btw, twórca tego artykułu jest idiotą, jesli nie wspomniał o tym, że interpretacja bajtów zależy od architektury procesora. Nie trać czasu na artykuły idiotów.

Jeszcze ten bufor, jakby nie można było od razu zapisywać wyniku w integerze.
komentarz 29 lipca 2015 przez Patrycjerz Mędrzec (192,320 p.)

NOWYFOLDER, heart CIĘ!!! Uratowałeś mnie, dzięki serdeczne. Nie wiem, jak będę mógł ci się odwdzięczyć.

Mi też właśnie nie podobał się od samego początku ten artykuł, ale nie ma nic lepszego o tej tematyce po polsku sad

komentarz 29 lipca 2015 przez Patrycjerz Mędrzec (192,320 p.)
A co do tego buforu, to nie ma chyba innego wyjścia z tej sytuacji, bo metoda read jego potrzebuje.
komentarz 29 lipca 2015 przez nowyfolder Mądrala (7,250 p.)
edycja 29 lipca 2015 przez nowyfolder
Można było od razu przekazać(odpowiednio rzutowany) adres zmiennej typu integer :P Chociaż to już szczegóły.

Podobne pytania

0 głosów
1 odpowiedź 678 wizyt
pytanie zadane 16 września 2015 w C i C++ przez Muminek Dyskutant (8,650 p.)
0 głosów
1 odpowiedź 365 wizyt
pytanie zadane 31 października 2017 w C i C++ przez PanJaqb Początkujący (360 p.)
+1 głos
0 odpowiedzi 127 wizyt
pytanie zadane 16 czerwca 2022 w C# przez mateusz45 Gaduła (3,240 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...