我正在尝试将整数值转换为无符号字节的字节。我听说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
我可以知道如何解决此问题。感谢
答案 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}}