论坛首页 入门技术论坛

java byte[] 转 int 实现

浏览 4233 次
该帖已经被评为新手帖
作者 正文
   发表时间: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;
}

 

 

   发表时间:2010-06-08  
为什么我试了可以?
还有你的代码里为什么要判断intByte[i]小于0啊?
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呀~~
0 请登录后投票
   发表时间:2010-06-08  
byte 不是 -127 - 128吗?
0 请登录后投票
   发表时间: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)与此类似,不多说了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics