제목에 모두 나와 있습니다. 저는 OpenGL과 OpenCL로 작업 중이며 서명되지 않은 ByteBuffer를 사용하여 데이터를 저장할 수 있다면 더 쉽게 사용할 수 있습니다.부호없는 ByteBuffer를 java로 가질 수 있습니까?
21
A
답변
-2
그것은 ByteBuffer
의 문제가 아니에요 -이 경우에도 부호 - 당신이 그것을 읽을 모든 바이트가 서명 될 것입니다 단지 때문에 byte
에 서명하고 우리가 변경할 수 없습니다.
51
부호의 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
자바 부호없는 형식을 지원하지 않습니다. 일반적인 해결책은 다음 가장 큰 유형 (귀하의 경우 : 짧음)으로 이동하여 마스크를 그냥 사용하여 더 낮은 'n'(귀하의 경우 8) 비트 만 사용하게하십시오.
...하지만 당신이관련 문제
- 1. ... ByteBuffer를
- 2. 클래스가 Java로 가질 수있는 내부 클래스의 수
- 3. Byte []를 부호없는 short Java로 읽기
- 4. Java에서 ByteBuffer를 빠르게 지우기 (지울 수 없음)
- 5. Func의 배열을 가질 수 있습니까
- 6. ViewModel에 ValueConverter를 가질 수 있습니까?
- 7. 개인 수업을 가질 수 있습니까?
- 8. 개인 수업을 가질 수 있습니까?
- 9. 이미지를 java로 할 수 있습니까?
- 10. Clojure에서 부호없는 비교가 있습니까?
- 11. 부호없는 int없이 CRC16 함수를 C에서 JAVA로 변환 할 때의 문제
- 12. Java : 직접 ByteBuffer를 double로 변환하십시오.
- 13. JDO와 JPA 주석을 동시에 가질 수 있습니까?
- 14. Xcode에서 구성 리소스를 가질 수 있습니까
- 15. Mongoose에서 "시간"스키마를 가질 수 있습니까?
- 16. 동적으로 업데이트되는 dataContext를 가질 수 있습니까?
- 17. Grails 도메인이 'id'를 가질 수 있습니까?
- 18. 내 데이터베이스가 삼각형 관계를 가질 수 있습니까?
- 19. 여러 개의 FilterAttributes를 가질 수 있습니까?
- 20. String.Empty에있는 것처럼 Class.Empty 객체를 가질 수 있습니까?
- 21. 부모 테이블에 자식 테이블을 가질 수 있습니까
- 22. 가져올 동적 리소스 경로를 가질 수 있습니까?
- 23. GitHub : 리포지토리에서 리포지토리를 가질 수 있습니까?
- 24. 투명한 그래픽 창을 파이썬으로 가질 수 있습니까?
- 25. 강력한 예외 안전과 이벤트를 가질 수 있습니까?
- 26. 서버 측 포함에서 임의성을 가질 수 있습니까?
- 27. 스레드가 둘 이상의 인수를 가질 수 있습니까?
- 28. Android에서 '선택 사항'권한을 가질 수 있습니까?
- 29. 다른 alertDialogbox 안에 alertDialogBox를 가질 수 있습니까
- 30. iAds의 인스턴스를 여러 개 가질 수 있습니까?
쓰레기 :-(버퍼에 적용 할 때 브레이크의 종류. 바이트 바이트입니다. 서명으로 그들이 처리하고 그것은 단지 기호 확장하거나 숫자 값로 사용시 문제. 당신이해야 할 일은 바이트를 "unsigned"(int는'short's, long은'int's, BigInteger'는'unsigned ')보다 더 많은 바이트를 저장할 수 있습니다. 'long's 등) – Thor84no
& 0xff를 수행하는 자신의 유틸리티 메소드를 작성하는 것은 쓰레기입니다. –
마침내 구아바의 멋진 클래스가 내가 원하는 것을 정확하게 찾았습니다. http://docs.guava-libraries.googlecode.com/ git/javadoc/com/google/common/io/ByteArrayDataInput.html # readUnsignedByte % 28 % 29 –