Rzutowanie tablicy bajtów na strukturę

0

Cześć!
mam pytanko, czy jest możliwe zrzutowanie z javie tablcy bajtów ( List<Byte> tab= new ArrayList<Byte>(); ) ,na stukturę, tak aby odczytać poszczególne pola? np pola 15-16 zawierają zmienną 16 bitą, a 20-30 łańcuch znkaów, da się jakoś do tego dobrać ? Tak jak w c:

	struct structFrame* frame = (struct structFrame*) buffor; 

Dziękuję za pomoc : )

3

Nie bo java w ogóle nie pozwala na takie dziwne operacje na pamięci a sposób przechowywania danych "wewnętrznie" w ogóle na coś takiego nie pozwala. List<Byte> to jest bardzo złożona struktura danych a nie goła tablica bajtów.

0

To jak taki efekt uzyskać jak java nie pozwala na takie "dziwne" rzeczy ? Mam InputStream i są w nim dane ułoże w odpowiedni sposób, da się to jakoś zrobić ? ( podejrzewam że musi się dać ) : )

0

"Są ułożone w odpowiedni sposób". Skąd wiesz, że w odpowiedni? I co to za sposób? Możesz przybliżyć?

W Javie możesz większość danych łatwo wyekspoertować do i zaimportować ze strumieni. See Java Serializacja , ObiectOutputStream, ObjectInputStream.

0

ułożone są np. w taki sposób:

bajt 0 -> typ ramki od 0x00 do 0x10
bajt 1 i 2 -> wartość 16 bitowa parametru
bajty 3-10 -> tablica char z krótkim opisem

To się zmienia, ale idea jest taka jak wyżej przedstawiona

i teraz w inputStream mam dostępne 11 bajtów, ale jak je poprawnie odczytać ? : )

1

Najprościej to użyj IOUtils.toByteArray(... )
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html

ale możesz się też pobawić https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html
(readByte, readShort , read( tablicaBajtów)

0

Dziękuję bardzo za pomoc ! : ) Wykorzystałem sposób pierwszy i maski bitowe/przesunięcia aby odtworzyć wartości.

jeszcze jedna rzecz mnie martwi, mam w tablicy byte b[] takie dane { 'O','K',0x00 }

I teraz po zrobieniu:
String string = new String(b);
i:
Log.d("MainActivity", "string : " + string);

mam taki wynik:
D/MainActivity: string : OK�

i moje pytanie, skąd się wziął znak : �?
na końcu na 100% jest 0x00 ( w c/c++ oznacza to koniec łańcucha danych).

Z góry dziękuję za pomoc : D

1

Przecież odpowiedziałeś - to jest wlaśnie to ZERO bo w javie to nie oznacza końca łańcucha danych.

0

Dziękuję! : D
Zaloguję żeby dać łapkę.
Wszystko jasne, do zamknięcia : ).

1 użytkowników online, w tym zalogowanych: 0, gości: 1