替换字节数组中的值,产生奇怪的结果

时间:2012-10-29 07:00:49

标签: java android bytearray byte

所以我通过蓝牙发送一些东西,为此我使用字节数组,我正在使用的字节数组之一,我需要在发送之前更改其中一个值,使用此...

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

2 个答案:

答案 0 :(得分:2)

这是因为byte范围是[-128, 127],如果您尝试在127中设置一个大于byte的值,它会往返{{1} },-128等等。

从SCJP 6书中可以看出:

-127
  

(...)结果是什么?缩小基元时,Java只会截断   不适合的高阶位。换句话说,它丢失了左边的所有位   你正在缩小的比特。

更多信息:

答案 1 :(得分:0)

这很简单,因为java中的字节特征从-128到128都是