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

Int cannot be converted to bytes using java

我正在尝试将我的整数值转换为无符号字节的字节。我听说 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请问如何解决这个问题。谢谢

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

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

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

您遇到的错误是 **Integer** cannot be converted to **Byte**。这是因为它们的 Wrapper classes 无法完成数值之间的显式转换。通过 (byte)servo1,您正在尝试转换 Integer ,即int 的包装器 class 到 byte 即原始类型.

考虑以下示例:

Long l = 10000000L;
Integer i = (int) l;     // Long cannot be converted to int
Byte b = (byte) i;       // Integer cannot be converted to byte

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

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

要在原始原始类型之间进行转换,您可以像尝试使用包装器 classes 那样明确地进行转换:

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

这意味着如果您使用原始类型,您的转换将有效:

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

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

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