Wpis z mikrobloga

#programowanie #cpp

Jak zamienić tablicę 4 charów na pojedynczego inta? W sensie 4 bajty tych charów mają się stać pojedynczym intem, który ma 4 bajty z natury. Najchętniej to bym go oszukał po prostu wskaźnikiem. Czyli int* wskint = wskchar; Ale niestety nie pozwoli mi C++ na coś takiego ( ͡º ͜ʖ͡º) Reinterpret_cast mi jakieś bzdury zwraca nie wiem czemu.
  • 21
@lionbest: Używałem tego, ale on mi bzdury wypluwa z zawartości tych charów. Ja doskonale wiem co mi powinien odczytać.

@rav3r: Tego rzutowania nie próbowałem ( ͡° ͜ʖ ͡°) Też czuję, że może zadziałać.
@nargil: Wiem, że tam jest little endian. I pomimo tego odczytuje mi bzdury, bo przeliczałem z palca w jedną i drugą stronę. Jeszcze muszę pogrzebać co tam się dzieje w środku.
@Khaine: Aaa w ogóle to trzeba zadbać by typ po zrzutowaniu był zalignowany odpowiednio, np na takich małych 32bit ARMach jak wskaźnik na int nie będzie wielokrotnością 4 to w ogóle nic nie odczyta. Zazwyczaj się rzutuje w drógą stronę z większego typu na mniejszy. A jak niema się pewności (np z jakiegoś protokołu) to pozostaje tylko rozwiązanie @fnord23, które nie jest tak wolne jak się wydaje.
@rav3r: 1) naucz się wołać
2) standard mówi, ƶe UB, więc to jest UB.
3) Nie mówię o endianness nigdzie. To się moƶe #!$%@?ć na wiele sposobów:
3.1) alignment - skąd wiesz, ƶe tablica jest wyrównana do wymaganego alignmentu inta lub procesor zezwala na niezalignowane kopie? pierwszy lepszy przykład z google'a
3.2) aliasing - mając wskaźniki niekompatybilnych typów kompilator moƶe zakładać, ƶe nie ma aliasingu i wykonywać optymalizacje. polecam przeczytać przykła