Temat mówi wszystko. Pracuję z OpenGL i OpenCL i ułatwiłbym życie, gdybym mógł użyć niepodpisanego ByteBuffer do przechowywania danych.Czy w java można mieć niepodpisany ByteBuffer?
21
A
Odpowiedz
-2
To nie jest problem ByteBuffer
- nawet jeśli był unsigned - każdy bajt zapoznanie z nią zostanie podpisana tylko dlatego byte
jest podpisana i nie możemy tego zmienić.
51
unsigned przykład ByteBuffer:
import java.nio.ByteBuffer;
public class test {
public static short getUnsignedByte(ByteBuffer bb) {
return ((short) (bb.get() & 0xff));
}
public static void putUnsignedByte(ByteBuffer bb, int value) {
bb.put((byte) (value & 0xff));
}
public static short getUnsignedByte(ByteBuffer bb, int position) {
return ((short) (bb.get(position) & (short) 0xff));
}
public static void putUnsignedByte(ByteBuffer bb, int position, int value) {
bb.put(position, (byte) (value & 0xff));
}
// ---------------------------------------------------------------
public static int getUnsignedShort(ByteBuffer bb) {
return (bb.getShort() & 0xffff);
}
public static void putUnsignedShort(ByteBuffer bb, int value) {
bb.putShort((short) (value & 0xffff));
}
public static int getUnsignedShort(ByteBuffer bb, int position) {
return (bb.getShort(position) & 0xffff);
}
public static void putUnsignedShort(ByteBuffer bb, int position, int value) {
bb.putShort(position, (short) (value & 0xffff));
}
// ---------------------------------------------------------------
public static long getUnsignedInt(ByteBuffer bb) {
return ((long) bb.getInt() & 0xffffffffL);
}
public static void putUnsignedInt(ByteBuffer bb, long value) {
bb.putInt((int) (value & 0xffffffffL));
}
public static long getUnsignedInt(ByteBuffer bb, int position) {
return ((long) bb.getInt(position) & 0xffffffffL);
}
public static void putUnsignedInt(ByteBuffer bb, int position, long value) {
bb.putInt(position, (int) (value & 0xffffffffL));
}
// ---------------------------------------------------
public static void main(String[] argv) throws Exception {
ByteBuffer buffer = ByteBuffer.allocate(20);
buffer.clear();
test.putUnsignedByte(buffer, 255);
test.putUnsignedByte(buffer, 128);
test.putUnsignedShort(buffer, 0xcafe);
test.putUnsignedInt(buffer, 0xcafebabe);
for (int i = 0; i < 8; i++) {
System.out.println("" + i + ": "
+ Integer.toHexString((int) getUnsignedByte(buffer, i)));
}
System.out.println("2: "
+ Integer.toHexString(getUnsignedShort(buffer, 2)));
System.out.println("4: " + Long.toHexString(getUnsignedInt(buffer, 4)));
}
}
1
Java nie obsługuje niepodpisanych typów. Typowym rozwiązaniem jest przejście do następnego największego typu (w twoim przypadku: krótkiego) i po prostu zamaskuj go, abyś używał tylko niższych "n" (w twoim przypadku 8) bitów.
... ale tego rodzaju przerw podczas próby zastosowania do buforów :-(
Powiązane problemy
- 1. C++ odpowiednik Java ByteBuffer?
- 2. Java/Android - Szybka analiza ByteBuffer
- 3. Problem z wydajnością Java ByteBuffer
- 4. Czy w Eclipse można mieć CDT i Java IDE?
- 5. Czy w routerze można mieć wiele loadChildrens?
- 6. Czy można mieć indeksowany widok w MySQL?
- 7. Czy można mieć tabele temp w funkcji?
- 8. Czy można ustawić domyślny typ wyliczenia jako niepodpisany znak?
- 9. Uzyskaj wskaźnik Java ByteBuffer, ale JNI
- 10. Czy istnieje sposób na utworzenie bezpośredniego obiektu ByteBuffer ze wskaźnika wyłącznie w języku Java?
- 11. Czyszczenie ByteBuffer
- 12. Czy można mieć zmienną składową "auto"?
- 13. Manipulacja ByteBuffer z JNI
- 14. Czy można mieć bardzo długi plik .htaccess?
- 15. Czy można mieć dwie różne wersje Perla?
- 16. Czy można mieć zakładki bez javascript?
- 17. Czy można mieć zdalną bazę danych sqlite?
- 18. Jak używać metody Wrap ByteBuffer w Javie
- 19. Określ liczbę bajtów w ByteBuffer
- 20. Czy możesz mieć # regiony w Androidzie/eclipse
- 21. Duplikat kopii głębokiej() Javy ByteBuffer
- 22. Jak umieścić zawartość ByteBuffer w OutputStream?
- 23. Czy w Apache2 można mieć dwa pliki z hasłami?
- 24. Czy można mieć nadmiar elementów w inicjatorze macierzy?
- 25. Czy w Ruby można mieć jedną linię dla każdego bloku?
- 26. W Dart, czy można mieć mapę konstelacji zamknięć?
- 27. Czy można mieć "odniesienie" do zmiennej w czasie kompilacji?
- 28. Czy w togach Ionic2 można mieć znak nowej linii?
- 29. Czy w rMarkdown można mieć tabelę sortowalną (interaktywną)?
- 30. Czy domyślny typ stałej całkowitej jest podpisany czy niepodpisany?
śmieci. Bajty są bajty. To one traktowane jako podpisane jedynie znaczenie, gdy znak przedłużenia lub wykorzystując je jako wartości liczbowych. Wszystko, co musisz zrobić, to odczytać bajty na liczbę, która może pomieścić więcej bajtów niż ta, którą chcesz mieć "unsigned" ('int' dla' short's, 'long' dla' int's, 'BigInteger' dla 'long's, itp.). – Thor84no
Pisanie własnej metody użytkowej robi & 0xff jest śmieciem –
W końcu znalazłem fajną klasę w guava robiąc dokładnie to czego chcę http://docs.guava-libraries.googlecode.com/ git/javadoc/com/google/common/io/ByteArrayDataInput.html # readUnsignedByte% 28% 29 –