integer bez znaku

0

Do tablicy byte[] wstawiam int, czy jest możliwość aby każdy int był unsigned, tzn żeby w tablicy bytes nie było wpisu typu -12.
Poniżej kod:

int len=Integer.parseInt(myAnnotation.len().toString());
int value=Integer.parseInt(field.get(object).toString());
byte[] bytes = ByteBuffer.allocate(len).putInt(value).array();
 
1

Niby nie ma takiej możliwości ponieważ definicja byte w Javie ma zakres -128..+127 i bajt jest interpretowany jako liczba w kodzie U2. Ale nie ma rzeczy niemożliwych. Wystarczy zrobić sobie dwie statyczne metody konwertujące zakres java byte do zakresu unsigned byte (0..255) jako int i odwrotnie, a następnie używać je przy konwersji między byte, a int. Nie ma wtedy żadnego znaczenia jakie wartości będą przechowywać bajty ponieważ jest to tylko kwestia umowna. Wartości uzyskiwane z Twojej metody będą miały zakres 0..255. Zakres -128..+127 też jest tylko umową zapisaną w postaci interpretacji bitów w metodach javy służących do konwersji na inne typy.

1

A jak dodasz do tego rysowanie to zrobisz z intow bałwanki. Wiadomo, wszystko sie da, ale jak widzisz musisz pisac wlasne metody konwertujace itp.

Krotka odpowiedz: Java nie ma typow unsigned, kropka. Dlatego wczytywanie czegokolwiek ze strumieni itp. wymaga gimnastyki z shiftami orami xorami srorami. Nie jestem pewien, ale mysleli chyba nad typami unsigned dla Java 8 albo 9?

2

Typ, zakres liczby, to tylko interpretacja zawartości. Twórcy Javy najwyraźniej uznali, że znacznie częściej używa się małych liczb ujemnych i dodatnich niż tylko 0..255. Autor wątku zapytał czy się da - gdyby wiedział, że wszystko to tylko interpretacja zapisana w metodach konwertujących Javy, to nawet nie zadawałby pytania. Najwyraźniej więc nie wiedział. W tym przypadku problemem jest interpretacja tylko jednego bita. Można użyć interpretacji Javy i wtedy masz rację - nie da się. Ale biorąc pod uwagę, że nie ma w Javie czegoś takiego jak kod uprzywilejowany, to Twoje metody interpretacji są tak samo wartościowe jak te wbudowane. Nich autor sobie zda sprawę, że konwersja automatyczna, to też jakaś procedura/metoda. A co do tej trudnej gimnastyki - wystarczy te nieszczęsne 8-bitów przekopiować żywcem do dolnej ćwiartki inta (lub odwrotnie) i po całej konwersji.

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