Java整数到字节

时间:2013-08-28 10:57:01

标签: java

我有以下代码:

byte[] someArray;
int a,b;
.
.
.
a=123; (result coming from calculations, always 0>=a<256)
b=91; (result coming from calculations, always 0>=b<256)

现在我想这样做

someArray[0]=a;
someArray[6]=b;

然而我试图转换为字节到此我失败了(我认为得到所有可能的错误消息)。还尝试了各种片段,指的是整数到字节的转换。

所以任何想法?

更新 这就是我得到 java.lang.NumberFormatException:无效int:“z”当我尝试这个 byteArray [0] = Integer.valueOf(String.valueOf(bani.substring(2, 3)),16).byteValue();

6 个答案:

答案 0 :(得分:2)

integer -> byte转换将导致编译错误,因为它可能导致精度损失。 Documentation.

但是,您可以执行显式演员:

someArray[0]=(byte)a;

答案 1 :(得分:2)

请注意,字节不是0255! 它是-128+127

如果您意识到这一点,只需转换值

someArray[0] = (byte) a;
someArray[6] = (byte) b;

但是用一张支票围绕它,因为java会向你投射一切:

if(value <= Byte.MAX_VALUE && value >= Byte.MIN_VALUE) {
    //do the cast
}
else {
    //error handling
}

例如:

int i = 1300;
byte b = (byte) i;
//b will be 20 here

<强>更新

如果要调用NumberFormatException,可以像这样解析值:

Byte.valueOf(Integer.toString(value));

请记住,字节是-128到127!

答案 2 :(得分:0)

首先, Java中没有未签名的数据类型。所有这些都是签名的 byte是签名数据类型,可以保存-128 <= b => 127范围内的值。其次,您需要从整数值中减去128,然后将其转换为byte,只是为了获得byte可以容纳的值:

someArray[0] = (byte) (a - 128);
someArray[6] = (byte) (b - 128);

答案 3 :(得分:0)

在Java中,整数基元类型(byte,short,int,long)始终是有符号的。

因此一个字节总是-128 ... 127

您可以使用强制转换

将int转换为字节
int i = 120;

byte b = (byte) i;

如果您将200分配给i而不是120,则b变为-56,将b分配给i然后我将保留-56而不会再次变为200.

这是因为200的二进制表示为11001000,并将这些位放入一个字节然后将其解释为-56,再将其放入int中使其成为1111111111111111111111001000

答案 4 :(得分:0)

我不确定你为了内存使用而开发这个应用程序的程度:-)。我们在HBase API中有一个API Bytes.toBytes()。您可以使用此API来获取许多类型的字节表示。也许你可以像Bytes.toInt()一样使用它的反向来转换回来。据我所见,没有出现精确损失或价值变化的问题。

您可以从这里下载lib Hbase Lib。将lib中的hbase-0.94.jar添加到您的项目中。

答案 5 :(得分:0)

为了保证Byte.MAX_VALUE以上和Byte.MIN_VALUE以下的值没有错误,您可以使用bitwize操作来强加最大值:

public static byte toByte(int i){
    return (byte) (i & 0x000000ff);
}

这将忽略前8位以上的所有位。从而为您提供任何int的有效字节(丢失24个最高位)。

如果你使用这个操作很多这个字节比比较和转换快得多。