使用java无法将Int转换为字节

时间:2015-06-26 01:24:26

标签: java byte

我正在尝试将整数值转换为无符号字节的字节。我听说java字节只提供127.然后我试着重新编写我的代码

这是我编辑后的代码:

Integer servo1 = 5117;
Byte data1;
data1 = (((byte)servo1) >> 6 & (byte)0xFF);

如果我想在字节数组中添加一个字节,该怎么办?

这是代码:

send = {(byte)0xE1, data1, data2, data3};

现在错误显示Integer cannot be converted to Byte我可以知道如何解决此问题。感谢

2 个答案:

答案 0 :(得分:1)

你的语法不太正确。如果要将整个表达式分配给该变量类型,则需要将整个表达式转换为byte。所以使用这个:

    Integer servo1 = 5117;
    Byte data1;
    data1 = (byte) ((servo1) >> 6 & 0xFF);

您可能对关于类型转换的Java文章感兴趣(特别是有关整数提升的部分):https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

答案 1 :(得分:0)

您获得的错误是(byte)servo1。这是因为数值之间的显式转换不能通过 Wrapper类来完成。到Integer你试图转换byte ,即。 int 的包装类到Long l = 10000000L; Integer i = (int) l; // Long cannot be converted to int Byte b = (byte) i; // Integer cannot be converted to byte ,即。原始类型

考虑以下示例:

Long l = 10000000L;
Integer i = l.intValue();
Byte b = i.byteValue();

要在包装器类之间进行转换,您应该使用它们提供的方法:

long l = 1000000L;
int i = (int) l;
byte b = (byte) b;

要在原始基元类型之间进行转换,您可以在尝试使用包装类时明确地进行转换:

int servo1 = 5117;
byte data1;
data1 = (((byte)servo1) >> 6 & (byte)0xFF);

这意味着如果你使用了原始类型,你的转换就会起作用:

Integer servo1 = 5117;
Byte data1;
data1 = (byte)(servo1.byteValue() >> 6 & (byte) 0xFF);

或者,如果您使用了正确的方法来转换您正在使用的包装类:

{{1}}