我正在尝试将一个字节转换为整数。我所做的所有搜索都使用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;
}
答案 0 :(得分:2)
简单地说:
byte b = ...;
int signedInt = b; // For negative bytes, resulting in negative ints
int unsignedInt = 0xFF & b; // For negative bytes, resulting in positive ints
仅供参考:int
是4个字节。因此,这就是您在互联网上找到的方法使用字节数组的原因。他们假设你传递一个4字节的数组,它将被拼接在一起形成一个int。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
如果b是无符号的
int i = b & 0xff;