所以我通过蓝牙发送一些东西,为此我使用字节数组,我正在使用的字节数组之一,我需要在发送之前更改其中一个值,使用此...
private void sendIntensity(int I){
intensity[3] = (byte) i;
sendIntensity();
}
原始字节数组的构成如下:
private byte[] intensity = new byte[]{58,0,42,0,10,13}
我从编辑文本获取强度,获取文本并使用正则表达式找到他们想要使用的强度,我使用
int option = Integer.parseInt(text);
要做到这一点。基本上,任何128以下的数字都能很好地工作,我可以看到这个,因为我记录了数组中的值,将其设置为127将记录58, 0, 42, 127, 10, 13
但是当我执行128或以上时,我在记录时得到一组奇怪的数据它
我将在那里放的最大数量是255。
当我使用intensity[3] = (byte) 128;
时记录数组中的内容时,我会回来50, 0, 42, -17, -66, -128, 10, 13
当我记录使用129时发生的事情时,我会回来50, 0, 42, -17, -66, -127, 10, 13
发生了什么事?为什么我不能像往常一样回归50, 0, 42, 128, 10, 13
?
答案 0 :(得分:2)
这是因为byte
范围是[-128, 127]
,如果您尝试在127
中设置一个大于byte
的值,它会往返{{1} },-128
等等。
从SCJP 6书中可以看出:
-127
(...)结果是什么?缩小基元时,Java只会截断 不适合的高阶位。换句话说,它丢失了左边的所有位 你正在缩小的比特。
更多信息:
答案 1 :(得分:0)
这很简单,因为java中的字节特征从-128到128都是