Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

4 shorty w 1 longu c;


Rekomendowane odpowiedzi

Opublikowano

Czołgiem, potrzebuję zapisać 4 shorty w 1 longu, a potem z tego longa odczytać 4 shorty, które zapisałem.

 

Coś takiego udało mi się uskrobać, but not work ;c

    public static long shortsToLong(short[] s) {
        return s[0] << 16 | s[1] << 32 | s[2] << 48 | s[3] & 0xFFFFFFFFL;
    }

    public static short[] longToShorts(long l) {
        return new short[]{(short) (l >> 16), (short) (l >> 32), (short) (l >> 48), (short) l};
    }

Powiem, że tych dziwnych operacji nie ogarniam za ni chu... ;d

I5 4690 3.5GHz | GeForce GTX 970 | Crucial Ballistix 8GB 1600MHz | SSD Transcend 370 128GB & HDD Seagate 5.4k 500GB | MSI B85-G43 | Corsair CX 500W | Zalman Z3 PLUS

Opublikowano

long nie musi być 64 bitowy

jeśli robisz takie rzeczy to korzystaj z już zdefiniowanych

int32_t
int16_t
int64_t

itp.

 

Problem ogólnie u ciebie jest taki, że jak wykonasz przesunięcie bitowe na shorcie to w wyniku dostajesz shorta, czyli tracisz to co przesunąłeś.

I nie możesz zwracać tablic w taki sposób. Musisz utworzyć strukturę, skorzystać z std::array, albo przekazywać tą tablicę przez referencję/wskaźnik do tej funkcji.

 

@down, rzeczywiście sry

Opublikowano

Po pierwsze musisz je przecastować do longa. Przynajmniej przy innych niż pierwszy. Jeśli chcesz je ułożyć po kolei (pierwsza liczba najmniejszy offset) to pierwszego wcale nie musisz przesuwać, potem po kolei w lewo (<<) o wielokrotności szesnastki. Przy odczytywaniu stosujesz odpowiednio przesuniętą w lewo maskę na dwa bajty (0xFFFF) i przesuwasz je z powrotem na prawo (>>). Potem tylko castujesz do shorta.

708121422388637873334.png

Opublikowano

Uh, niekoniecznie musisz castować. Jest prostszy sposób. Tworzysz longa, lecisz po tych shortach w pętli i dodajesz je do tego longa (or). Przy każdej iteracji przesuwasz longa.

708121422388637873334.png

Opublikowano

Ok, ogarnałem ;) Można zamknąc C:

I5 4690 3.5GHz | GeForce GTX 970 | Crucial Ballistix 8GB 1600MHz | SSD Transcend 370 128GB & HDD Seagate 5.4k 500GB | MSI B85-G43 | Corsair CX 500W | Zalman Z3 PLUS

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...