Konu her şeyi söylüyor. OpenGL ve OpenCL ile çalışıyorum ve verileri depolamak için imzasız bir ByteBuffer kullanabilirsem hayatı kolaylaştıracağım.Java'da imzasız bir ByteBuffer'a sahip olmak mümkün mü?
21
A
cevap
-2
O ByteBuffer
bir sorun değil - bu bile imzasız - ondan okumak her bayt, imzalanacak sırf byte
imzalanmış ve biz bunu değiştirmek mümkün değil.
51
imzasız ByteBuffer örnek:
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 imzasız türlerini desteklemez. Tipik çözüm, bir sonraki en büyük türe (sizin durumunuzda: kısaca) gitmek ve sadece maskelemek, böylece sadece alt 'n' (sizin durumunuzda 8) bitleri kullanmanızdır.
... amaİlgili konular
- 1. Birden fazla başlatıcıya sahip olmak mümkün mü?
- 2. Aynı ada sahip iki özelliğe sahip olmak mümkün mü?
- 3. Bir TextClock'un string değerine sahip olmak mümkün mü?
- 4. MATLAB'de tekrarlayan bir anonim fonksiyona sahip olmak mümkün mü?
- 5. Değişen uzunluktaki bir tuple vektörüne sahip olmak mümkün mü? Böyle
- 6. Birden çok satırlı tableless seçime sahip olmak mümkün mü?
- 7. Uygulama sunucusu olmadan JMS sunucusuna sahip olmak mümkün mü?
- 8. Ülkeye göre birden çok APK desteğine sahip olmak mümkün mü?
- 9. ngFor'da shorthand yerel değişkenine sahip olmak mümkün mü?
- 10. Android'de birden fazla dize kaynak dosyasına sahip olmak mümkün mü?
- 11. Android uygulamaları için animasyonlu başlatıcı ikonlarına sahip olmak mümkün mü?
- 12. ng-dahil seçenek seçeneğine sahip olmak mümkün mü?
- 13. Highcharts'taki gibi NVD3 grafiklerinde yakınlaştırma seçeneğine sahip olmak mümkün mü?
- 14. Symfony2, Bir denetleyicide bir eylem için iki yola sahip olmak mümkün mü?
- 15. Tek bir alanda bir projeye sahip olmak ve iki çerçeveyi kullanmak mümkün mü (Yii ve Yii2)?
- 16. Bir veritabanından kod indirip uygulamanın kendisine aitmiş gibi yürütebilen bir işleve sahip olmak mümkün mü?
- 17. Belirli bir veri kümesi için birden çok geçerli BST'ye sahip olmak mümkün mü?
- 18. Hem yarı saydam hem de tamamen şeffaf bir Windows formuna sahip olmak mümkün mü?
- 19. Android Studio'daki android SDK'ya bağlı olarak düz bir java kütüphanesi modülüne sahip olmak mümkün mü
- 20. Codeigniter, değişken olan bir genel işlev adına sahip olmak mümkün mü?
- 21. Daha az eğimli olan özel bir italik css özelliğine sahip olmak mümkün mü?
- 22. Bir Oyun Merkezi "En İyi" Liderlik Tablosuna sahip olmak mümkün mü?
- 23. Enum imzasız char için varsayılan tür ayarlamak mümkün mü?
- 24. HTML5'te birden çok veri- {name} özelliğine sahip olmak mümkün mü?
- 25. Android - Aynı anda 3G ve Wifi bağlantılarına sahip olmak mümkün mü?
- 26. Birden çok PyPlot penceresine sahip olmak mümkün mü? Yoksa subplots ile sınırlı mıyım?
- 27. Git Altmodüller: Her biri için birden fazla URL'ye sahip olmak mümkün mü?
- 28. Sitemdeki tüm jQuery doğrulama kullanımları için site varsayılan varsayılan ayarlarına sahip olmak mümkün mü?
- 29. Aynı Kendo UI Izgarası için farklı düzenleyici şablonlarına sahip olmak mümkün mü?
- 30. jQuery UI'ye güvenmeksizin AngularJS ile sürükle ve bırak işlevine sahip olmak mümkün mü?
Çöp :-(tampon uygulamak çalıştığınızda sonları bu tür şeyler. Bayt bayt bulunmaktadır. Imzalı olarak onlar davranılıyor Bu sadece işaret uzanan veya sayısal değerler olarak bunları kullanırken önemli. Tek yapmanız gereken, baytları, "imzasız" ("int", "BigInteger" için "long", "long" için "int" olandan daha fazla bayt tutabilecek bir sayıya kadar okumaktır. '' long's, vb. ' – Thor84no
Kendi yardımcı programı yazma & 0xff yapmak çöptür –
Nihayet http://docs.guava-libraries.googlecode.com/ istiyorum guava'da güzel sınıf buldum. git/javadoc/com/google/common/io/ByteArrayDataInput.html # readUnsignedByte% 28% –