0

我正在尝试将字节转换为整数。我所做的所有搜索都使用 byte[] 我假设它是任何数组。我想转换 F 字节(不是如下所示的 b),但它给出了更改错误:不适用于参数。

    byte F;
    mmInStream.read(packetBytes);            

    b [counter]= packetBytes[0];             
    F=b [counter];
    counter++;
    temp = byteToInt(b); //Convert byte to int

这是我在其中一个站点上找到的一个字节 To Int。

    private int byteToInt(byte[] b) {

        int value= 0;
    for(int i=0;i<b.length;i++){                
        int n=(b[i]<0?(int)b[i]+256:(int)b[i])<<(8*i);             
    value+=n;
   }         
   return value; 

    }
4

3 回答 3

2

只需这样做:

byte b = ...;
int signedInt = b; // For negative bytes, resulting in negative ints
int unsignedInt = 0xFF & b; // For negative bytes, resulting in positive ints

仅供参考:Anint是 4 个字节。因此,这就是您在 Internet 上找到的方法使用字节数组的原因。他们假设你传递了一个 4 字节的数组,它们将被拼接在一起以形成一个 int。

于 2013-09-11T14:50:45.570 回答
1

你可以使用这个:

int i = 234;
byte b = (byte) i;
System.out.println(b); // -22
int i2 = b & 0xFF;
System.out.println(i2); // 234

或者这个也是:

public static byte[] intToByteArray(int a)
{
byte[] ret = new byte[4];
ret[3] = (byte) (a & 0xFF);   
ret[2] = (byte) ((a >> 8) & 0xFF);   
ret[1] = (byte) ((a >> 16) & 0xFF);   
ret[0] = (byte) ((a >> 24) & 0xFF);
return ret;
}

public static int byteArrayToInt(byte[] b)
{
return (b[3] & 0xFF) + ((b[2] & 0xFF) << 8) + ((b[1] & 0xFF) << 16) + ((b[0] & 0xFF) << 24);
}
于 2013-09-11T14:51:56.817 回答
0

如果 b 是无符号的

int i = b & 0xff;
于 2013-09-11T14:51:29.957 回答