Java实现uint8_t/uint16_t/uint32_t

在Java中,整数可以用byte,short,int和long等类型来表示,并不支持unsigned类型。然而在很多情况下Java也需要处理无符号类型,如翻译C/C++代码,与C/C++进行通讯等,这时就需要用Java来实现uint8_t,uint16_t,uint32_t等类型。

Java实现unsigned类型一般的思路为用更大的存储空间来保存无符号类型,以确保unsigned 最高位不会被Java整型中的符号位所混淆。举个例子:

uint16_t所占的存储空间为16位(即2字节),如果我们用Java中占2字节的short类型来保存uint16_t,肯定会造成最高位的混淆。所以我们可以用占4字节的int类型&0x0000ffff来保存uint16_t。
uintN_t中的N表示该类型占用的存储空间为N位:

// uintN_t bits bytes 对应Java实现
// uint8_t 8 1 short
// uint16_t 16 2 int
// uint32_t 32 4 long

public short getUint8(short s){
    return (short) (s & 0x00ff);
}

public int getUint16(int i){
    return i & 0x0000ffff;
}

public long getUint32(long l){
    return l & 0x00000000ffffffff;
}

你可能感兴趣的:(Java实现uint8_t/uint16_t/uint32_t)