Java实现uint8_t/uint16_t/uint32_t

(转载请注明原文地址:http://blog.csdn.net/vector_yi/article/details/44648997)
Java中,整数可以用byte,short,intlong等类型来表示,并不支持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_tbitsbytes对应Java实现
uint8_t81short
uint16_t162int
uint32_t324long

以下为用Java实现不同无符号类型的具体代码:
uint8_t

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

uint16_t

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

uint32_t

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

举个例子:
C++代码

 uint16_t n1,n2,n3; n3 = n1 ^ n2;

Java实现

 int n1,n2,n3; n3 = getUint16(n1 ^ n2);

代码纯手打,如有问题还请见谅。

转载于:https://my.oschina.net/u/858166/blog/697311

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值