是否有可能在java中有一个无符号的ByteBuffer? [英] Is it possible to have an unsigned ByteBuffer in java?

查看:229
本文介绍了是否有可能在java中有一个无符号的ByteBuffer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

主题说明了一切。我正在使用OpenGL和OpenCL,如果我可以使用无符号的ByteBuffer来存储数据,那么会让生活更轻松。

Subject says it all. I'm working with OpenGL and OpenCL and would make life easier if I could just use an unsigned ByteBuffer to store data.

推荐答案

unsigned ByteBuffer示例:

unsigned ByteBuffer example:

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)));
    }
}

这篇关于是否有可能在java中有一个无符号的ByteBuffer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆