Java实现uint8_t/uint16_t/uint32_t
(转载请注明原文地址:http://blog.csdn.net/vector_yi/article/details/44648997)
在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 |
以下为用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);
代码纯手打,如有问题还请见谅。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。