浏览 4233 次
锁定老帖子 主题:java byte[] 转 int 实现
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-08
函数需要: 传入一个一维byte数组, 比如{255,255} 转换为int 为65535,相当于16进制FFFFH,以此类推,当传入为{255,1}时,返回int为511,相当于1FFH. 基本上是用在协议解析上,当有两个byte表示长度协议时,用此函数可以得到协议的长度。
代码如下: public static int bytesToInt(byte[] intByte) { int fromByte = 0; for (int i = 0; i < 2; i++) { int n = (intByte[i] < 0 ? (int)intByte[i] + 256 : (int)intByte[i]) << (8 * i); System.out.println(n); fromByte += n; } return fromByte; }
而网上找的一些其他代码就不顶用不知道为什么,如: public static int bytesToInt(byte[] bytes) { int num = bytes[0] & 0xFF; num |= ((bytes[1] << 8) & 0xFF00); return num; }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-06-08
为什么我试了可以?
还有你的代码里为什么要判断intByte[i]小于0啊? |
|
返回顶楼 | |
发表时间:2010-06-08
ddzero 写道 为什么我试了可以?
还有你的代码里为什么要判断intByte[i]小于0啊? byte是0-255的数 所以要判断<0 我是这样测试的 byte[] newByte = new byte[2]; byte[0] = (byte)255; byte[1] = (byte)255; 放进去就不对~~~ 因为用datainputStream的read方面读byte的话 传入的就是0-255的int呀~~ |
|
返回顶楼 | |
发表时间:2010-06-08
byte 不是 -127 - 128吗?
|
|
返回顶楼 | |
发表时间:2010-06-09
public static int toInt(byte[] value) { int i = (value[1] & 0xFF); i = (i << 8) | (value[0] & 0xFF); return i; } 楼主讨论的是小端字节序及2个byte的情况。 其它情况(如大端字节序或4个byte)与此类似,不多说了。 |
|
返回顶楼 | |